व्यवहार में अंतर

इस पेज पर, Cloud Firestore और MongoDB के व्यवहार में अंतर के बारे में बताया गया है.

MongoDB के वर्शन के हिसाब से, काम करने वाली सुविधाओं के बारे में जानने के लिए, यहां जाएं:

कनेक्शन और डेटाबेस

  • हर कनेक्शन को सिर्फ़ एक Cloud Firestore डेटाबेस से कनेक्ट किया जा सकता है.
  • डेटाबेस से कनेक्ट करने से पहले, उसे बनाना ज़रूरी है.

नामकरण

आपके डेटा मॉडल के हिस्सों के नाम रखने के लिए, यहां दिए गए अंतर लागू होते हैं.

संग्रह

  • __.*__ से मेल खाने वाले कलेक्शन के नाम इस्तेमाल नहीं किए जा सकते.

फ़ील्ड

  • __.*__ से मिलते-जुलते फ़ील्ड के नाम इस्तेमाल नहीं किए जा सकते.
  • खाली फ़ील्ड के नाम इस्तेमाल नहीं किए जा सकते.

दस्तावेज़

  • दस्तावेज़ का साइज़ 4 MiB से ज़्यादा नहीं होना चाहिए.
  • फ़ील्ड को ज़्यादा से ज़्यादा 20 लेवल तक नेस्ट किया जा सकता है. ऐरे और ऑब्जेक्ट टाइप वाले हर फ़ील्ड से, कुल डेप्थ में एक लेवल जुड़ जाता है.

_id

  • टॉप-लेवल का _id फ़ील्ड, ObjectId, String, 64-बिट पूर्णांक, 32-बिट पूर्णांक, Double, Binary या Object होना चाहिए. अन्य BSON टाइप काम नहीं करते.

वैल्यू

  • JavaScript, Symbol, DBPointer, और Undefined BSON टाइप इस्तेमाल नहीं किए जा सकते.

तारीख

  • तारीख की वैल्यू, [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z] के बीच होनी चाहिए.

Decimal128

  • NaN, पॉज़िटिव इनफ़िनिटी, और नेगेटिव इनफ़िनिटी वैल्यू को लिखने के समय कैननिकल किया जाता है.
  • Decimal128 पर अंकगणितीय कार्रवाइयां नहीं की जा सकतीं.

डबल-साइज़ बेड

  • NaN वैल्यू को लिखने के समय कैननिकल किया जाता है.

रेगुलर एक्सप्रेशन

  • रेगुलर एक्सप्रेशन के विकल्प मान्य होने चाहिए ("i", "m", "s", "u" या "x"). साथ ही, इन्हें दोहराए बिना वर्णमाला के क्रम में दिया जाना चाहिए.

क्वेरी

  • नैचुरल सॉर्ट ऑर्डर (सॉर्ट करने के लिए साफ़ तौर पर निर्देश नहीं देने वाली क्वेरी), इंसर्शन ऑर्डर या _id के हिसाब से बढ़ते क्रम में नहीं है.

एग्रीगेशन

  • एग्रीगेशन में ज़्यादा से ज़्यादा 250 स्टेज हो सकती हैं.
  • $merge और $out चरणों का इस्तेमाल नहीं किया जा सकता. इस्तेमाल की जा सकने वाली स्टेज और ऑपरेटर की पूरी सूची देखने के लिए, कमांड सेक्शन देखें.
  • $lookup स्टेज में, let और pipeline फ़ील्ड काम नहीं करते.
  • $facet स्टेज में, इनपुट स्टेज में $rand का इस्तेमाल नहीं किया जा सकता, क्योंकि यह एक अस्थिर एक्सप्रेशन है.

लिखता है

  • update या findAndModify की अपसर्ट सुविधा का इस्तेमाल करके, डॉलर के निशान ("$") से शुरू होने वाले नाम वाले दस्तावेज़ नहीं बनाए जा सकते.
  • पक्का करें कि आपकी कनेक्शन स्ट्रिंग में retryWrites=false शामिल हो. इसके अलावा, अपने ड्राइवर के हिसाब से सही तरीके का इस्तेमाल करें, ताकि यह पक्का किया जा सके कि ड्राइवर इस सुविधा का इस्तेमाल न करे. फिर से लिखने की सुविधा काम नहीं करती.

लेन-देन

  • स्नैपशॉट आइसोलेशन और सीरियलाइज़ेबल लेन-देन काम करते हैं.

  • डिफ़ॉल्ट रूप से, लेन-देन में स्नैपशॉट आइसोलेशन के साथ ऑप्टिमिस्टिक कॉन्करेंसी कंट्रोल का इस्तेमाल किया जाता है.

समस्या से जुड़ा डेटा देखने की अनुमति दें

  • Cloud Firestore, snapshot , majority, और linearizable से जुड़ी समस्याओं को हल करने में मदद करता है. डिफ़ॉल्ट वैल्यू snapshot होती है, जिसका मतलब स्नैपशॉट आइसोलेशन होता है.

    अगर ऐप्लिकेशन को लगातार अपडेट किए जाने वाले डेटा की ज़रूरत है और उसे राइट स्क्यू की गड़बड़ियों से बचना है, तो linearizable का इस्तेमाल करें. अन्य वर्कलोड के लिए, snapshot से परफ़ॉर्मेंस बेहतर हो सकती है और लेन-देन से जुड़ी समस्याएं कम हो सकती हैं.

समस्या के बारे में शिकायत करें

  • सिर्फ़ w: 'majority' और w: 1 राइट कंसर्न का इस्तेमाल किया जा सकता है.

पढ़ने से जुड़ी प्राथमिकता

  • सिर्फ़ primary, primaryPreferred, primary_preferred, secondary_preferred, और nearest से जुड़ी समस्याओं को पढ़ा जा सकता है.

इंडेक्स

  • वाइल्डकार्ड इंडेक्स का इस्तेमाल नहीं किया जा सकता.
  • Cloud Firestore, _id पर अपने-आप इंडेक्स नहीं बनाता. हालांकि, यह पक्का करता है कि _id की वैल्यू, कलेक्शन में यूनीक हों.
  • मल्टी-की की सुविधा के बिना बनाए गए इंडेक्स, राइट ऑपरेशन के आधार पर अपने-आप मल्टी-की इंडेक्स में नहीं बदलते. इंडेक्स बनाते समय, मल्टी-की को चालू करना ज़रूरी है. इस विकल्प को बदला नहीं जा सकता.

गड़बड़ियां

  • Cloud Firestore और MongoDB के बीच गड़बड़ी के कोड और मैसेज अलग-अलग हो सकते हैं.

निर्देश

यहां दी गई जानकारी से पता चलता है कि कुछ खास कमांड के लिए, अलग-अलग डिवाइसों पर अलग-अलग तरीके से काम किया जाता है.

  • यहां दी गई टेबल में शामिल नहीं किए गए निर्देशों का इस्तेमाल नहीं किया जा सकता.
  • comment को ज़्यादातर कमांड के साथ इस्तेमाल किया जा सकता है, लेकिन इसे अनदेखा कर दिया जाता है.
  • maxTimeMS को ज़्यादातर कमांड में इस्तेमाल किया जा सकता है, लेकिन इसे अनदेखा भी किया जा सकता है.

क्वेरी और लिखता है

Command ऐसे फ़ील्ड जिनका इस्तेमाल नहीं किया जा सकता

find

  • max
  • min
  • returnKey
  • showRecordId
  • tailable
  • oplogReplay
  • noCursorTimeout
  • awaitData
  • allowPartialResults
  • collation
  • allowDiskUsage
  • let

aggregate

  • collation
  • let

insert

(कुछ नहीं)

update

अपडेट स्टेटमेंट में:

  • collation

delete

मिटाने के स्टेटमेंट में:

  • collation

findAndModify

  • collation
  • let

count

  • collation

distinct

  • collation

getMore

  • comment

killCursors

(कुछ नहीं)

explain

(कुछ नहीं)

लेन-देन और सेशन

Command ऐसे फ़ील्ड जिनका इस्तेमाल नहीं किया जा सकता

commitTransaction

(कुछ नहीं)

abortTransaction

(कुछ नहीं)

endSessions

(कुछ नहीं)

एडमिनिस्ट्रेशन

Command ऐसे फ़ील्ड जिनका इस्तेमाल नहीं किया जा सकता ज़रूरी जानकारी

listDatabases

  • authorizedDatabases
अगर filter की वैल्यू दी गई है, तो यह खाली होनी चाहिए.

listCollections

(कुछ नहीं)

अगर authorizedCollections की वैल्यू दी गई है, तो उसे 'गलत' के तौर पर सेट किया जाना चाहिए.

listIndexes

(कुछ नहीं)

createIndexes

(कुछ नहीं)

dropIndexes

(कुछ नहीं)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
यह कमांड कोई कार्रवाई नहीं करती है.

अगर capped दिया गया है, तो इसकी वैल्यू 'गलत है' होनी चाहिए.

आगे क्या करना है