סוגי נתונים ומנהלי התקנים נתמכים של MongoDB

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

סוגי נתונים

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

מסמך _id

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

  • ObjectId
  • מחרוזת
  • מספר שלם של 64 ביט
  • מספר שלם של 32 ביט
  • זוגית
  • בינארי
  • אובייקט
  • בוליאני

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

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

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

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

‫Cloud Firestore תומך בגרסאות הדרייברים הבאות:

שפה גרסאות של מנהלי התקנים
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

כלי צד שלישי

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

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

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

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

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

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

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

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

סוג BSON BSON ‫Cloud 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
}
ערכי חותמות הזמן של Cloud Firestore נשמרים ברמת דיוק של מיקרו-שניות, אבל כל מה שמעבר לרמת דיוק של מילי-שניות אובד בהמרה ל-BSON.

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

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

סוג BSON BSON ‫Cloud 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"
}
}
}

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

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

סוג Cloud Firestore BSON ‫Cloud 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: כשהם מאוחסנים ב-Cloud Firestore. לדוגמה, שדה BSON‏ __foo__ הופך ל-__r:foo__ ב-Cloud Firestore.

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

כשמשתמשים בערכות SDK של לקוחות Cloud 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

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
}
    

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