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

यह सिर्फ़ Cloud Firestore Enterprise वर्शन के लिए काम का है.

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

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

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

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

नाम देना

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

संग्रह

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

फ़ील्ड

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

दस्तावेज़

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

_id

  • दस्तावेज़ _id (टॉप-लेवल फ़ील्ड) एक ObjectId, String या 64-बिट पूर्णांक होना चाहिए. अन्य BSON टाइप काम नहीं करते.
  • खाली स्ट्रिंग ("") और 64-बिट 0 (0L) का इस्तेमाल नहीं किया जा सकता.

वैल्यू

  • 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 चरण में, _id पर foreignField तय करने के अलावा और कुछ नहीं किया जा सकता.

लिखता है

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

लेन-देन

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

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

समस्या के बारे में जानकारी पढ़ना

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

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

समस्या के बारे में लिखें

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

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

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

इंडेक्स

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

गड़बड़ियां

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

निर्देश

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

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

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

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

find

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

aggregate

  • bypassDocumentValidation
  • readConcern
  • collation
  • hint
  • comment
  • let

insert

  • bypassDocumentValidation
  • comment

update

  • collation
  • arrayFilters
  • hint

delete

  • comment
  • write

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

  • collation
  • hint

findAndModify

  • fields
  • bypassDocumentValidation
  • collation
  • arrayFilters
  • hint
  • comment
  • let

count

  • hint
  • readConcern
  • collation
  • comment

distinct

  • readConcern
  • collation
  • comment
  • hint

getMore

  • comment

killCursors

(कुछ नहीं)

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

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

commitTransaction

  • comment

abortTransaction

  • comment

endSessions

(कुछ नहीं)

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

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

listDatabases

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

listCollections

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

listIndexes

  • comment

createCollection

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

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

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