הבדלים בהתנהגות

רלוונטי רק למהדורת Cloud Firestore Enterprise.

בדף הזה מוסבר על ההבדלים בהתנהגות בין Cloud Firestore עם תאימות ל-MongoDB לבין MongoDB.

לפירוט של התכונות הנתמכות בהתאם לגרסת MongoDB, אפשר לעיין במאמרים הבאים:

חיבורים ומסדי נתונים

  • כל חיבור מוגבל למסד נתונים יחיד עם תאימות ל-MongoDB ב-Cloud Firestore.
  • צריך ליצור מסד נתונים לפני שמתחברים אליו.

מתן שמות

ההבדלים הבאים חלים על שמות של חלקים במודל הנתונים.

אוספים

  • אין תמיכה בשמות של אוספים שתואמים ל-__.*__.

שדות

  • אין תמיכה בשמות שדות שתואמים ל-__.*__.
  • אין תמיכה בשמות שדות ריקים.

לכתוב מסמכים

  • גודל המסמך המקסימלי הוא 4MiB‎.
  • העומק המקסימלי של קינון שדות הוא 20. כל שדה מסוג Array ו-Object מוסיף רמה אחת לעומק הכולל.

_id

  • המסמך _id (שדה ברמה העליונה) חייב להיות ObjectId,‏ String או מספר שלם של 64 ביט. אין תמיכה בסוגים אחרים של BSON.
  • אין תמיכה במחרוזת ריקה ("") וב-0 של 64 ביט (0L).

ערכים

  • אין תמיכה בסוגי ה-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. רשימה מלאה של השלבים והאופרטורים הנתמכים מופיעה בקטע בנושא פקודות.
  • בשלב $lookup אפשר לציין רק foreignField ב-_id.

כותב

  • אי אפשר ליצור מסמכים עם שמות שמתחילים בסימן דולר ("$") באמצעות התכונה upsert של update או findAndModify.
  • מוודאים שמחרוזת החיבור כוללת את retryWrites=false (או משתמשים בשיטה שמתאימה לדרייבר) כדי לוודא שהדרייבר לא ינסה להשתמש בתכונה הזו. אין תמיכה בכתיבות שאפשר לנסות שוב.

עסקאות

  • יש תמיכה בבידוד snapshot ובטרנזקציות שניתנות לסריאליזציה.

  • כברירת מחדל, טרנזקציות משתמשות בבקרת מקביליות אופטימית עם בידוד של תמונת מצב.

דיווח על בעיה

  • ‫Cloud Firestore עם תאימות ל-MongoDB תומך ב-snapshot,‏ majority ו-linearizable read concerns. ברירת המחדל היא snapshot, שמתייחסת לבידוד snapshot.

    משתמשים ב-linearizable כשהאפליקציה דורשת עקביות קפדנית וצריכה למנוע אנומליות של הטיה בכתיבה. עבור עומסי עבודה אחרים, snapshot יכול לשפר את הביצועים ולהפחית את התחרות על משאבים בעסקאות.

Write concern

  • יש תמיכה רק ב-write concerns‏ w: 'majority' ו-w: 1.

העדפת קריאה

  • רק רמות הדאגה לגבי קריאה primary,‏ primaryPreferred,‏ primary_preferred,‏ secondary_preferred ו-nearest נתמכות.

מדדים

  • אין תמיכה באינדקסים עם תו כללי לחיפוש.
  • ‫Cloud Firestore עם תאימות ל-MongoDB לא יוצר באופן אוטומטי אינדקס ב-_id, אבל הוא מוודא שהערכים של _id הם ייחודיים בתוך אוסף.
  • אינדקסים שלא מופעלת בהם האפשרות multi-key לא משתנים אוטומטית לאינדקסים מסוג multi-key על סמך פעולות כתיבה. צריך להפעיל את האפשרות 'כמה מקשים' כשיוצרים את האינדקס, ואי אפשר לשנות את האפשרות הזו.

שגיאות

  • קודי השגיאה והודעות השגיאה עשויים להיות שונים בין Cloud Firestore עם תאימות ל-MongoDB לבין 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 שדות שלא נתמכים Notes

listDatabases

  • authorizedDatabases
  • comment
אם מציינים את הערך filter, הוא חייב להיות ריק.

listCollections

  • comment
אם מציינים את הערך authorizedCollections, הוא חייב להיות false.

listIndexes

  • comment

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • writeConcern
  • encryptedFields
  • comment
הפקודה הזו לא מבצעת פעולה.

capped צריך להיות false אם הוא מסופק.

המאמרים הבאים