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

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

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

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

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

नाम रखना

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

संग्रह

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

फ़ील्ड

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

दस्तावेज़

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

_id फ़ील्ड

  • टॉप-लेवल _id फ़ील्ड, ObjectId, स्ट्रिंग, 64-बिट पूर्णांक, 32-बिट पूर्णांक, डबल, बाइनरी या ऑब्जेक्ट होना चाहिए. अन्य 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 की upsert सुविधा का इस्तेमाल करके नहीं बनाया जा सकता.
  • पक्का करें कि आपकी कनेक्शन स्ट्रिंग में 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 की वैल्यू, कलेक्शन में यूनीक हों. क्रम से लगाने का ऐसा ही तरीका अपनाने के लिए, आपको _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 की वैल्यू दी गई है, तो वह false होनी चाहिए.

listIndexes

(कुछ नहीं)

createIndexes

(कुछ नहीं)

dropIndexes

(कुछ नहीं)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
यह कमांड, नो-ऑप है.

अगर capped दिया गया है, तो यह गलत होना चाहिए.

drop

(कुछ नहीं)

ड्रॉप कलेक्शन से जुड़ी पाबंदियां

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

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

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