הבדלים בהתנהגות
בדף הזה מוסבר על ההבדלים בהתנהגות בין Firestore עם תאימות ל-MongoDB לבין MongoDB.
פירוט של התכונות הנתמכות בהתאם לגרסת MongoDB מופיע במאמרים הבאים:
חיבורים ומסדי נתונים
- כל חיבור מוגבל למסד נתונים אחד של Firestore עם תאימות ל-MongoDB.
- צריך ליצור מסד נתונים לפני שמתחברים אליו.
מתן שמות
ההבדלים הבאים חלים על שמות של חלקים במודל הנתונים.
אוספים
- אין תמיכה בשמות אוספים שתואמים ל-
__.*__.
שדות
- אין תמיכה בשמות שדות שתואמים ל-
__.*__. - אין תמיכה בשמות שדות ריקים.
מסמכים
- הגודל המקסימלי של המסמך הוא 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 ובטרנזקציות שניתנות לסריאליזציה.
כברירת מחדל, בעסקאות נעשה שימוש בבקרת מקביליות אופטימית עם בידוד של תמונת מצב.
קריאה של נתוני הבעיה
Firestore עם תאימות ל-MongoDB תומך בשיטות
snapshot,majorityו-linearizableלקריאה. ברירת המחדל היאsnapshot, שמתייחסת לבידוד snapshot.משתמשים ב-
linearizableכשהאפליקציה דורשת עקביות מחמירה וצריך למנוע אנומליות של הטיה בכתיבה. במקרים אחרים של עומסי עבודה,snapshotיכול לשפר את הביצועים ולצמצם את התחרות על משאבים.
כתיבת דאגה
- יש תמיכה רק ב-
w: 'majority'וב-w: 1.
העדפת קריאה
- רק רמות הדאגה
primary,primaryPreferred,primary_preferred,secondary_preferredו-nearestנתמכות.
מדדים
- אינדקסים עם תו כללי לחיפוש לא אפשריים.
- Firestore עם תאימות ל-MongoDB לא יוצר באופן אוטומטי אינדקס ב-
_id, אבל הוא מוודא שהערכים של_idהם ייחודיים בתוך אוסף. כדי להשיג התנהגות מיון דומה, צריך ליצור במפורש אינדקס מסודר בשדה_id. עם זאת, חשוב לשים לב לבעיות פוטנציאליות בנקודות גישה, במיוחד אם הערכים של_idעולים או יורדים באופן מונוטוני (למשל, חותמות זמן), כי זה יכול להשפיע על הביצועים בהיקף גדול. - אינדקסים ללא הפעלה של multi-key לא משתנים אוטומטית לאינדקסים מסוג multi-key על סמך פעולות כתיבה. צריך להפעיל את האפשרות 'כמה מקשים' כשיוצרים את האינדקס, ואי אפשר לשנות את האפשרות הזו.
שגיאות
- יכול להיות שיהיו הבדלים בין קודי השגיאה והודעות השגיאה ב-Firestore עם תאימות ל-MongoDB לבין קודי השגיאה והודעות השגיאה ב-MongoDB.
פקודות
ההבדלים הבאים בהתנהגות חלים על פקודות ספציפיות.
- פקודות שלא מופיעות בטבלאות הבאות לא נתמכות.
- רוב הפקודות מקבלות את
comment, אבל מתעלמות ממנו. - רוב הפקודות מקבלות את
maxTimeMS, אבל יכול להיות שהן יתעלמו ממנו.
שאילתות
וכותב
| Command | שדות שלא נתמכים |
|---|---|
|
|
|
|
|
|
|
|
(ללא) |
|
|
בהצהרת עדכון:
|
|
|
בתוך הצהרת מחיקה:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(ללא) |
|
|
(ללא) |
טרנזקציות
וסשנים
| Command | שדות שלא נתמכים |
|---|---|
|
|
(ללא) |
|
|
(ללא) |
|
|
(ללא) |
ניהול
| Command | שדות שלא נתמכים | הערות |
|---|---|---|
|
|
|
אם מציינים את filter, הוא חייב להיות ריק. |
|
|
(ללא) |
אם מציינים את הערך authorizedCollections, הוא חייב להיות false. |
|
|
(ללא) |
|
|
|
(ללא) |
|
|
|
(ללא) |
|
|
|
|
הפקודה הזו לא מבצעת פעולה. הערך של capped חייב להיות false אם הוא מצוין.
|
|
|
(ללא) |
מגבלות על איסוף פריטים
ההגבלות הבאות חלות כשמבטלים אוסף:
- יצירה מחדש של אינדקס: אי אפשר ליצור את אותה הגדרת אינדקס מיד אחרי ירידה. צריך לחכות עד שהרקע יימחק.
- מגבלת גודל: אם תגררו אוספים גדולים מדי, יכול להיות שתקבלו הודעה על פסק זמן בחיבור. אם מופיעים פסיקות זמן, כדאי להאריך את המועד האחרון לחיבור. אפשר להשתמש במקום זאת במחיקה בכמות גדולה.
- אירועים: אירועי איסוף של נתוני נטישה לא נוצרים ב-Eventarc כשמשתמשים בפקודה
drop.
המאמרים הבאים
- מריצים את המדריך למתחילים: יצירת מסד נתונים והתחברות אליו.
- רשימה מלאה של התכונות הנתמכות מופיעה במאמר סוגי נתונים, דרייברים ותכונות נתמכים של MongoDB.