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

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

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

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

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

מתן שמות

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

אוספים

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

שדות

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

לכתוב מסמכים

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

השדה _id

  • השדה _id ברמה העליונה חייב להיות ObjectId, מחרוזת, מספר שלם של 64 ביט, מספר שלם של 32 ביט, Double, בינארי או אובייקט. אין תמיכה בסוגי 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 תומך ב-read concerns‏ snapshot,‏ majority ו-linearizable. ברירת המחדל היא snapshot, שמתייחסת לבידוד snapshot.

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

כתיבת חשש

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

העדפת קריאה

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

אינדקסים

  • אין תמיכה באינדקסים של תווים כלליים לחיפוש.
  • ‫Cloud Firestore לא יוצר באופן אוטומטי אינדקס ב-_id, אבל הוא מבטיח שהערכים של _id יהיו ייחודיים בתוך אוסף. כדי להשיג התנהגות מיון דומה, צריך ליצור במפורש אינדקס מסודר בשדה _id. עם זאת, חשוב לשים לב לבעיות פוטנציאליות של נקודות חמות, במיוחד אם הערכים של _id עולים או יורדים באופן מונוטוני (למשל, חותמות זמן), כי זה יכול להשפיע על הביצועים בקנה מידה גדול.
  • אינדקסים שלא מופעל בהם ריבוי מפתחות לא משתנים אוטומטית לאינדקסים עם ריבוי מפתחות על סמך פעולות כתיבה. צריך להפעיל את האפשרות 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.

drop

(ללא)

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

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

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

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