تفاوت های رفتاری

این صفحه تفاوت‌های رفتاری بین Cloud Firestore و MongoDB را شرح می‌دهد.

برای مشاهده‌ی جزئیات ویژگی‌های پشتیبانی‌شده بسته به نسخه‌ی MongoDB، به لینک زیر مراجعه کنید:

اتصالات و پایگاه‌های داده

  • هر اتصال به یک پایگاه داده Cloud Firestore محدود می‌شود.
  • قبل از اتصال به پایگاه داده، باید آن را ایجاد کرد.

نامگذاری

تفاوت‌های زیر در نامگذاری بخش‌های مدل داده شما اعمال می‌شود.

مجموعه‌ها

  • نام‌های مجموعه منطبق با __.*__ پشتیبانی نمی‌شوند.

فیلدها

  • نام فیلدهایی که با __.*__ مطابقت دارند، پشتیبانی نمی‌شوند.
  • نام فیلدهای خالی پشتیبانی نمی‌شوند.

اسناد

  • حداکثر حجم سند ۴ مگابایت است.
  • حداکثر عمق تودرتوی فیلدها ۲۰ است. هر فیلد آرایه‌ای و فیلد شیء-نوع، یک سطح به عمق کلی اضافه می‌کند.

_id

  • فیلد _id سطح بالا باید یک ObjectId، String، عدد صحیح ۶۴ بیتی، عدد صحیح ۳۲ بیتی، Double، Binary یا Object باشد. سایر انواع BSON پشتیبانی نمی‌شوند.

ارزش‌ها

  • انواع جاوا اسکریپت، نماد، DBPointer و BSON تعریف نشده پشتیبانی نمی‌شوند.

تاریخ

  • مقادیر تاریخ باید در [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z] قرار گیرند.

دهدهی128

  • مقادیر NaN ، مثبت بی‌نهایت و منفی بی‌نهایت هنگام نوشتن، استانداردسازی می‌شوند.
  • عملیات حسابی روی Decimal128 پشتیبانی نمی‌شوند.

دو برابر

  • مقادیر NaN هنگام نوشتن، استانداردسازی می‌شوند.

عبارت منظم

  • گزینه‌های عبارت منظم باید معتبر باشند ("i"، "m"، "s"، "u" یا "x") و به ترتیب حروف الفبا و بدون تکرار ارائه شوند.

پرس‌وجوها

  • ترتیب مرتب‌سازی طبیعی (پرس‌وجوهای بدون مرتب‌سازی صریح) با ترتیب درج یا ترتیب صعودی بر اساس _id مطابقت ندارد.

تجمیع‌ها

  • تجمعات به ۲۵۰ مرحله محدود می‌شوند.
  • مراحل $merge و $out پشتیبانی نمی‌شوند. برای مشاهده لیست کامل مراحل و عملگرهای پشتیبانی شده، به بخش دستورات مراجعه کنید.
  • مرحله $lookup از فیلدهای let و pipeline پشتیبانی نمی‌کند.
  • مرحله $facet $rand یا $sample در مراحل ورودی پشتیبانی نمی‌کند زیرا یک عبارت فرار است.

می‌نویسد

  • اسنادی که نام آنها با علامت دلار ("$") شروع می‌شود را نمی‌توان با استفاده از ویژگی upsert در update یا findAndModify ایجاد کرد.
  • Make sure your connection string includes retryWrites=false (or use the method appropriate to your driver) to make sure the driver does not attempt to use this feature. Retryable writes are not supported.

تراکنش‌ها

  • جداسازی اسنپ‌شات و تراکنش‌های قابل سریال‌سازی پشتیبانی می‌شوند.

  • به طور پیش‌فرض، تراکنش‌ها از کنترل‌های همزمانی خوش‌بینانه با جداسازی لحظه‌ای (snapshot isolation) استفاده می‌کنند.

نگرانی را بخوانید

  • Cloud Firestore از دغدغه‌های snapshot ، majority و linearizable read پشتیبانی می‌کند. پیش‌فرض snapshot است که به جداسازی snapshot اشاره دارد.

    Use linearizable when the application requires strict consistency and must prevent write skew anomalies. For other workloads, snapshot can improve performance and reduce transaction contention.

نگرانی را بنویسید

  • فقط w: 'majority' و w: 1 write concern پشتیبانی می‌شوند.

ترجیحات را بخوانید

  • فقط دغدغه‌های primary ، primaryPreferred ، primary_preferred ، secondary_preferred و nearest read پشتیبانی می‌شوند.

شاخص‌ها

  • شاخص‌های Wildcard پشتیبانی نمی‌شوند.
  • Cloud Firestore به طور خودکار ایندکسی روی _id ایجاد نمی‌کند، اما تضمین می‌کند که مقادیر _id در یک مجموعه منحصر به فرد هستند.
  • Indexes without multi-key enabled are not automatically changed to multi-key indexes based on write operations. You must enable multi-key when you create the index and the option cannot be changed.

خطاها

  • کدهای خطا و پیام‌ها ممکن است بین Cloud Firestore و MongoDB متفاوت باشند.

دستورات

تفاوت‌های رفتاری زیر در مورد دستورات خاص اعمال می‌شود.

  • دستوراتی که در جداول زیر ذکر نشده‌اند، پشتیبانی نمی‌شوند.
  • comment توسط اکثر دستورات پذیرفته می‌شود اما نادیده گرفته می‌شود.
  • تابع maxTimeMS توسط اکثر دستورات پذیرفته می‌شود، اما می‌توان آن را نادیده گرفت.

پرس‌وجوها و نوشته‌ها

فرماندهی فیلدهای پشتیبانی نشده

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

(هیچکدام)

تراکنش‌ها و جلسات

فرماندهی فیلدهای پشتیبانی نشده

commitTransaction

(هیچکدام)

abortTransaction

(هیچکدام)

endSessions

(هیچکدام)

اداره

فرماندهی فیلدهای پشتیبانی نشده یادداشت‌ها

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 باید false باشد.

قدم بعدی چیست؟