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

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

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

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

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

מתן שמות

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

אוספים

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

שדות

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

לכתוב מסמכים

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

_id

  • השדה _id ברמה העליונה חייב להיות ObjectId,‏ String,‏ 64-bit integer,‏ 32-bit integer,‏ 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. רשימה מלאה של השלבים והאופרטורים הנתמכים מופיעה בקטע בנושא פקודות.
  • בשלב $lookup אין תמיכה בשדות let ו-pipeline.
  • השלב $facet לא תומך ב-$rand או ב-$sample בשלבי הקלט כי זה ביטוי לא יציב.

כותב

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

עסקאות

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

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

דיווח על בעיה

  • Cloud Firestore תומך בבעיות קריאה מסוג snapshot,‏ majority ו-linearizable. ברירת המחדל היא snapshot, שמתייחסת לבידוד snapshot.

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

כתיבה של נתוני הדאגה

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

העדפת קריאה

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

מדדים

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

שגיאות

  • קודים והודעות של שגיאות עשויים להיות שונים בין 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 חייב להיות false אם הוא מצוין.

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