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

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

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

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

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

מתן שמות

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

אוספים

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

שדות

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

לכתוב מסמכים

  • הגודל המקסימלי של המסמך הוא 16 MiB.
  • העומק המקסימלי של הקינון בשדות הוא 20. כל שדה מסוג Array ו-Object מוסיף רמה אחת לעומק הכולל.
  • באירועים Eventarc, מסמכים בגודל של יותר מ-10MiB לא נכללים במטען הייעודי (payload) של האירוע.

שדה _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. רשימה מלאה של השלבים והאופרטורים הנתמכים מופיעה בקטע בנושא פקודות.
  • בשלב $facet אין תמיכה ב-$rand או ב-$sample בשלבי הקלט כי מדובר בביטוי לא יציב.

כותב

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

עסקאות

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

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

קריאה של נתוני הבעיה

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

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

כתיבת דאגה

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

העדפת קריאה

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

מדדים

  • אינדקסים עם תו כללי לחיפוש לא אפשריים.
  • Cloud Firestore לא יוצר באופן אוטומטי אינדקס ב-_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 חייב להיות false אם הוא מצוין.

drop

(ללא)

מגבלות על איסוף פריטים

ההגבלות הבאות חלות כשמבטלים אוסף:

  • יצירה מחדש של אינדקס: אי אפשר ליצור את אותה הגדרת אינדקס מיד אחרי ירידה. צריך לחכות עד שהרקע יימחק.
  • מגבלת גודל: אם תגררו אוספים גדולים מדי, יכול להיות שתקבלו הודעה על פסק זמן בחיבור. אם מופיעים פסיקות זמן, כדאי להאריך את המועד האחרון לחיבור. אפשר להשתמש במקום זאת במחיקה בכמות גדולה.
  • אירועים: אירועי השמטה של אוספים לא נוצרים ב-Eventarc כשמשתמשים בפקודה drop.

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