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

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

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

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

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

التسمية

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

المجموعات

  • لا يمكن استخدام أسماء المجموعات التي تتطابق مع __.*__.

الحقول

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

المستندات

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

حقل _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.
  • تأكَّد من أنّ سلسلة الاتصال تتضمّن 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 "خطأ" في حال توفيرها.

listIndexes

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

createIndexes

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

dropIndexes

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

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
هذا الأمر لا يؤدي أي وظيفة.

يجب أن تكون قيمة capped "خطأ" في حال توفيرها.

drop

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

القيود المفروضة على مجموعات Drop

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

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

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