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

توضّح هذه الصفحة الاختلافات السلوكية بين 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 الأداء ويقلّل من تعارض المعاملات.

كتابة مشكلة

  • يُسمح فقط باستخدام خيارَي 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.

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