סוגי נתונים ודרייברים נתמכים של MongoDB

בטבלאות הבאות מפורטים סוגי הנתונים, הדרייברים והכלים של צד שלישי שנתמכים ב-MongoDB, ל-Firestore עם תאימות ל-MongoDB.

סוגי הנתונים

סוג BSON יש תמיכה
מספר שלם של 32 ביט כן
מספר שלם של 64 ביט כן
מערך כן
נתונים בינאריים כן
בוליאני כן
תאריך כן
DBPointer לא
Decimal128 כן
כפול כן
JavaScript לא
‫JavaScript (עם היקף) לא
MaxKey כן
MinKey כן
Null כן
אובייקט כן
ObjectId כן
ביטוי רגולרי כן
String כן
סמל לא
חותמת הזמן כן
לא מוגדר לא

מסמך _id

השדה _id ברמה העליונה במסמך חייב להיות אחד מהסוגים הבאים:

  • ObjectId
  • String
  • מספר שלם של 64 ביט
  • מספר שלם של 32 ביט
  • כפול
  • בינארי
  • אובייקט
  • בוליאני

הגודל הכולל של _id לא יכול להיות יותר מ-1,500 בייטים.

כל ערך בתוך מזהה מסוג אובייקט חייב להיות גם מסוג מזהה נתמך או מערך של ערכים, שכל אחד מהם הוא מסוג מזהה נתמך.

אין תמיכה בסוגי BSON אחרים.

שפות ודרייברים של MongoDB

‫Firestore עם תאימות ל-MongoDB תומך בגרסאות הדרייברים הבאות:

שפה גרסאות של מנהלי התקנים
Java ‎5.x
Node.js 6.x
5.x
Python ‫‎4.x
‫‎3.x (x ≥ 12)
המשך ‎2.x
C#‎ ‎3.x
Ruby ‫‎2.x (x ≥ 16)‎

תמיכה באימות OIDC

מנהלי ההתקנים של Go,‏ C#‎ ו-Ruby תומכים באימות של OpenID Connect (‏OIDC) מ-Google Cloud לכל גרסאות מנהלי ההתקנים הנתמכות.

מנהלי ההתקנים של Java,‏ Node.js ו-Python תומכים באימות OIDC מ-Google Cloud החל מגרסאות מנהלי ההתקנים הבאות:

  • ‫Java: ‏ 4.10
  • ‫Node.js: ‏ 6.7
  • ‫Python: ‏ 4.7

כלי צד שלישי

‫Firestore עם תאימות ל-MongoDB תומך בכלים של צד שלישי שמתוארים בקטע הזה.

כלי תיאור הערות
mongoimport כלי מסד הנתונים של MongoDB טעינת נתונים בכמות גדולה
mongoexport כלי מסד הנתונים של MongoDB
mongodump כלי מסד הנתונים של MongoDB
mongorestore כלי מסד הנתונים של MongoDB טעינת נתונים בכמות גדולה
mongosh MongoDB Shell
Mongoose כלי ליצירת מודלים של אובייקטים ב-MongoDB
MongoDB Compass כלי GUI לניתוח נתונים

תאימות בין סוגי BSON ו-Firestore

בקטע הזה מפורט המיפוי בין סוגי MongoDB BSON לבין ערכי Firestore. מכיוון ש-BSON הוא פורמט בינארי ו-Firestore API משתמש במאגרי אחסון לפרוטוקולים, סוגים מסוימים ממופים ישירות, ואילו סוגים אחרים דורשים ייצוגים מיוחדים של מפות.

סקירה כללית של המיפוי

בטבלאות הבאות מוצגות ההתאמות בין סוגי הנתונים של BSON לבין הייצוגים של מאגר האחסון לפרוטוקולים ב-Firestore.

מיפויים ישירים

לסוגים האלה יש מקבילה ישירה בשתי המערכות.

סוג BSON BSON Firestore Proto הערות
Double 1.23 double_value: 1.23
מחרוזת "hello" string_value: "hello"
אובייקט
{
"a": 1.23
}
map_value {
fields {
key: "a"
value {
double_value: 1.23
}
}
}
מערך
[
1.23,
"a"
]
array_value {
values {
double_value: 1.23
}
values {
string_value: "a"
}
}
בינארי (סוג משנה אפס) BinData(0, 'SGVsbG8=') bytes_value: "Hello"
בוליאני true boolean_value: true
Null null null_value: NULL_VALUE
מספר שלם של 64 ביט Long('1234567890') integer_value: 1234567890
תאריך ISODate('2026-05-22T04:00:00Z')
timestamp_value {
seconds: 1779470400
nanos: 0
}
ערכי חותמות הזמן של Firestore מאוחסנים ברמת דיוק של מיקרו-שניות, אבל כל מה שמעבר לרמת דיוק של אלפיות השנייה אובד בהמרה ל-BSON.

סוגי BSON שמיוצגים כמפות ב-Firestore API

סוגי ה-BSON האלה נכללים ב-map_value של Firestore עם מפתחות מיוחדים שמציינים את הסוג.

סוג BSON BSON Firestore Proto הערות
מספר שלם של 32 ביט 123
map_value {
fields {
key: "__int__"
value {
integer_value: 123
}
}
}
בינארי (סוג משנה שאינו אפס) BinData(1, 'AQIDBA==')
map_value {
fields {
key: "__binary__"
value {
bytes_value: "<subtype + data>"
}
}
}
בייט של סוג משנה שנוסף לפני הנתונים.
ObjectId ObjectId('67eea9446dc71ec469e9496a')
map_value {
fields {
key: "__oid__"
value {
string_value:
"67eea9446dc71ec469e9496a"
}
}
}
מחרוזת הקסדצימלית באותיות קטנות.
חותמת זמן (פנימי) Timestamp(123, 1)
map_value {
fields {
key: "__request_timestamp__"
value {
map_value {
fields {
key: "seconds"
value {
integer_value: 123
}
}
fields {
key: "increment"
value {
integer_value: 1
}
}
}
}
}
}
חותמת זמן פנימית של MongoDB.
ביטוי רגולרי RegExp('.*', 'im')
map_value {
fields {
key: "__regex__"
value {
map_value {
fields {
key: "pattern"
value {
string_value: ".*"
}
}
fields {
key: "options"
value {
string_value: "im"
}
}
}
}
}
}
Min Key MinKey()
map_value {
fields {
key: "__min__"
value {
null_value: NULL_VALUE
}
}
}
Max Key MaxKey()
map_value {
fields {
key: "__max__"
value {
null_value: NULL_VALUE
}
}
}
Decimal128 Decimal128('4E7')
map_value {
fields {
key: "__decimal128__"
value {
string_value: "4E7"
}
}
}

סוגי Firestore שלא קיימים באופן מקורי ב-BSON

הסוגים האלה של Firestore מיוצגים כמפות עם מבנה מיוחד כשהם מומרים ל-BSON.

סוג Firestore BSON Firestore Proto
GeoPoint
{
"__fs_geopoint__": {
"latitude": 37.42,
"longitude": -122.08
}
}
geo_point_value {
latitude: 37.42
longitude: -122.08
}
וקטור
{
"__fs_vector__": [
1.0,
2.0
]
}
map_value {
fields {
key: "__type__"
value {
string_value: "__vector__"
}
}
fields {
key: "value"
value {
array_value {
...
}
}
}
}
הפניה למסמך
{
"__fs_ref__": "projects/.../documents/col/doc"
}
reference_value: "projects/.../documents/col/doc"

שמות השדות

שמות שדות מ-MongoDB שתואמים ל-__.*__ עוברים בריחה (escape) על ידי שילוב של r: כשהם מאוחסנים ב-Firestore. לדוגמה, שדה BSON מסוג __foo__ הופך ל-__r:foo__ ב-Firestore.

סוגי נתונים של BSON בערכות SDK של לקוחות

כשמשתמשים בערכות SDK של לקוח Firestore, אפשר להשתמש במחלקות SDK מיוחדות כדי לייצג סוגי נתונים של BSON, כמו מספרים עשרוניים של 128 ביט, ביטויים רגולריים וחותמות זמן של BSON.

Node.js
const { RegexValue, Decimal128Value, BsonTimestamp } = require('@google-cloud/firestore');

// Setting fields with BSON data types
const res = await db.collection('foo').doc('bar').set({
  regex: new RegexValue('myRegexPattern', 'i'),
  decimal: new Decimal128Value('0.73e-7'),
  bsonTimestamp: new BsonTimestamp(1732754912, 500),
});
    
Java
import com.google.cloud.firestore.BsonTimestamp;
import com.google.cloud.firestore.Decimal128Value;
import com.google.cloud.firestore.RegexValue;
import java.util.HashMap;
import java.util.Map;

Map<String, Object> data = new HashMap<>();
data.put("regex", new RegexValue("myRegexPattern", "i"));
data.put("decimal", new Decimal128Value("0.73e-7"));
data.put("bson_timestamp", new BsonTimestamp(1732754912, 500));

db.collection("foo").doc("bar").set(data);
    
Java
Android
import com.google.firebase.firestore.BsonTimestamp;
import com.google.firebase.firestore.Decimal128Value;
import com.google.firebase.firestore.RegexValue;
import java.util.HashMap;
import java.util.Map;

Map<String, Object> data = new HashMap<>();
data.put("regex", new RegexValue("myRegexPattern", "i"));
data.put("decimal", new Decimal128Value("0.73e-7"));
data.put("bson_timestamp", new BsonTimestamp(1732754912, 500));

db.collection("foo").doc("bar").set(data);
    
המשך
import (
    "context"

    "cloud.google.com/go/firestore"
)

func writeBsonTypes(ctx context.Context, client *firestore.Client) error {
    _, err := client.Collection("foo").Doc("bar").Set(ctx, map[string]interface{}{
        "regex":     firestore.RegexValue{Pattern: "myRegexPattern", Options: "i"},
        "decimal":   firestore.Decimal128Value{Value: "0.73e-7"},
        "bson_timestamp": firestore.BsonTimestamp{Seconds: 1732754912, Increment: 500},
    })
    return err
}
    

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