الاختلافات في السلوك

توضّح هذه الصفحة الاختلافات السلوكية بين Cloud Firestore وMongoDB.

للحصول على تفاصيل حول الميزات المتوافقة حسب إصدار MongoDB، يُرجى الاطّلاع على ما يلي:

عمليات الربط وقواعد البيانات

  • يقتصر كل اتصال على قاعدة بيانات Cloud Firestore واحدة.
  • يجب إنشاء قاعدة بيانات قبل الاتصال بها.

التسمية

تنطبق الاختلافات التالية على تسمية أجزاء من نموذج البيانات.

المجموعات

  • لا تتوفّر أسماء المجموعات التي تتطابق مع __.*__.

الحقول

  • لا يمكن استخدام أسماء الحقول التي تتطابق مع __.*__.
  • لا يمكن استخدام أسماء حقول فارغة.

المستندات

  • الحد الأقصى لحجم المستند هو 16 MiB.
  • الحدّ الأقصى لعمق التداخل في الحقول هو 20. يضيف كل حقل من النوع Array وObject مستوى واحدًا إلى العمق الإجمالي.
  • في أحداث Eventarc، لا يتم تضمين المستندات التي يزيد حجمها عن 10 ميغابايت في حمولة الحدث.

الحقل _id

  • يجب أن يكون الحقل _id ذو المستوى الأعلى ObjectId أو String أو عددًا صحيحًا 64 بت أو عددًا صحيحًا 32 بت أو Double أو Binary أو Object. لا تتوافق مع أنواع BSON الأخرى.

القيم

  • لا تتوافق أنواع BSON التالية: JavaScript وSymbol وDBPointer وUndefined.

التاريخ

  • يجب أن تندرج قيم التاريخ ضمن [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 مع مستويات الاهتمام بالقراءة snapshot وmajority وlinearizable. القيمة التلقائية هي snapshot التي تشير إلى عزل اللقطات.

    استخدِم linearizable عندما يتطلّب التطبيق اتساقًا صارمًا ويجب أن يمنع حدوث أي أخطاء في الكتابة. بالنسبة إلى أحمال العمل الأخرى، يمكن أن يؤدي استخدام snapshot إلى تحسين الأداء والحدّ من تعارض المعاملات.

Write concern

  • يُسمح باستخدام خيارَي 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 الحقول غير المتوافقة Notes

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

(القائمة فارغة)

قيود جمع البيانات

تنطبق القيود التالية عند حذف مجموعة:

  • إعادة إنشاء الفهرس: لا يمكنك إنشاء إعدادات الفهرس نفسها مباشرةً بعد حدوث انخفاض. عليك الانتظار إلى أن تنتهي عملية حذف الخلفية.
  • حدّ الحجم: قد يؤدي حذف المجموعات الكبيرة إلى انتهاء مهلة الاتصال. يمكنك زيادة الموعد النهائي للاتصال إذا ظهرت لك مهلات. يمكنك استخدام ميزة الحذف المجمّع كبديل.
  • الأحداث: لا يتم إنشاء أحداث جمع البيانات التي تم إسقاطها في Eventarc عند استخدام الأمر drop.

الخطوات التالية