أنواع البيانات وبرامج التشغيل المتوافقة مع MongoDB

تسرد الجداول التالية أنواع بيانات MongoDB وبرامج التشغيل وأدوات الجهات الخارجية المتوافقة مع Cloud Firestore.

أنواع البيانات

نوع BSON متوافقة
عدد صحيح 32 بت نعم
عدد صحيح 64 بت نعم
مصفوفة نعم
البيانات الثنائية نعم
قيمة منطقية نعم
التاريخ نعم
DBPointer لا
Decimal128 نعم
مزدوج نعم
JavaScript لا
‫JavaScript (مع النطاق) لا
MaxKey نعم
MinKey نعم
خالية نعم
عنصر نعم
ObjectId نعم
تعبير عادي نعم
سلسلة نعم
الرمز لا
الطابع الزمني نعم
غير محدد لا

المستند _id

يجب أن يكون حقل _id ذو المستوى الأعلى في المستند من أحد الأنواع التالية:

  • ObjectId
  • سلسلة
  • عدد صحيح 64 بت
  • عدد صحيح 32 بت
  • مزدوج
  • برنامج ثنائي
  • عنصر
  • قيمة منطقية

يجب ألا يتجاوز إجمالي حجم _id ‏1500 بايت.

يجب أن تكون كل قيمة ضمن معرّف من نوع "كائن" من نوع معرّف متوافق أو مصفوفة من القيم، كل منها من نوع معرّف متوافق.

لا تتوافق أنواع 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 أداة واجهة مستخدم رسومية لاستكشاف البيانات

توافق BSON ونوع Cloud Firestore

يلخّص هذا القسم عملية الربط بين أنواع MongoDB BSON وقيم Cloud Firestore. بما أنّ BSON هو تنسيق ثنائي وواجهة برمجة تطبيقات Cloud Firestore تستخدم Protocol Buffers، يتم ربط بعض الأنواع مباشرةً، بينما يتطلّب البعض الآخر تمثيلات ربط خاصة.

نظرة عامة على عملية الربط

توضّح الجداول التالية كيفية مطابقة أنواع بيانات BSON مع تمثيلات Protocol Buffers Cloud Firestore.

عمليات الربط المباشر

هذه الأنواع لها مكافئ مباشر في كلا النظامين.

نوع BSON BSON Cloud Firestore Proto ملاحظات
Double 1.23 double_value: 1.23
String "hello" string_value: "hello"
Object
{
"a": 1.23
}
map_value {
fields {
key: "a"
value {
double_value: 1.23
}
}
}
Array
[
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 الممثَّلة كخرائط في واجهة برمجة تطبيقات 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 (Internal) 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
}
Vector
{
"__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 التي تتطابق مع __.*__ من خلال دمج 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
}
    

الخطوات التالية