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

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

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

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

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

नाम देना

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

संग्रह

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

फ़ील्ड

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

दस्तावेज़

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

_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 स्टेज मौजूद नहीं हैं. इस्तेमाल किए जा सकने वाले स्टेज और ऑपरेटर की पूरी सूची देखने के लिए, कमांड सेक्शन देखें.
  • $facet स्टेज में, इनपुट स्टेज में $rand या $sample का इस्तेमाल नहीं किया जा सकता, क्योंकि यह एक अस्थिर एक्सप्रेशन है.

लिखता है

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

लेन-देन

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

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

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

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

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

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

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

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

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

इंडेक्स

  • वाइल्डकार्ड इंडेक्स का इस्तेमाल नहीं किया जा सकता.
  • Cloud Firestore, _id पर अपने-आप इंडेक्स नहीं बनाता. हालांकि, यह पक्का करता है कि _id की वैल्यू, किसी कलेक्शन में यूनीक हों. सॉर्ट करने के लिए, आपको _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 दिया गया है, तो इसकी वैल्यू 'गलत है' होनी चाहिए.

drop

(कुछ नहीं)

कलेक्शन हटाने से जुड़ी सीमाएं

किसी कलेक्शन को हटाने पर, ये सीमाएं लागू होती हैं:

  • इंडेक्स फिर से बनाना: इंडेक्स में बदलाव होने के तुरंत बाद, उसी इंडेक्स कॉन्फ़िगरेशन को नहीं बनाया जा सकता. आपको बैकग्राउंड हटाने की प्रोसेस पूरी होने तक इंतज़ार करना होगा.
  • साइज़ की सीमा: बड़े कलेक्शन को हटाने पर, कनेक्शन टाइम आउट हो सकते हैं. अगर आपको टाइम आउट दिखते हैं, तो कनेक्शन की समयसीमा बढ़ाएं. इसके अलावा, एक साथ कई आइटम मिटाने की सुविधा का इस्तेमाल किया जा सकता है.
  • इवेंट: drop कमांड का इस्तेमाल करने पर, Eventarc के लिए ड्रॉप कलेक्शन इवेंट जनरेट नहीं होते हैं.

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