Azure Cosmos DB ل MongoDB (الإصدار 3.2): الميزات المدعومة وبناء الجملة

ينطبق على: MongoDB

Azure Cosmos DB هي خدمة قواعد بيانات متعددة النماذج موزعة عالمياً من Microsoft. يمكنك التواصل مع Azure Cosmos DB ل MongoDB باستخدام أي من برامج تشغيل عميل MongoDB مفتوحة المصدر. يتيح Azure Cosmos DB ل MongoDB استخدام برامج تشغيل العميل الحالية من خلال الالتزام ببروتوكول MongoDB السلكي.

باستخدام Azure Cosmos DB ل MongoDB، يمكنك الاستمتاع بفوائد MongoDB التي اعتدت عليها، مع جميع قدرات المؤسسة التي يوفرها Azure Cosmos DB: التوزيع العالمي، والتقسيم التلقائي، وضمانات التوفر وزمن الانتقال، والفهرسة التلقائية لكل حقل، والتشفير في حالة الراحة، والنسخ الاحتياطية، وأكثر من ذلك بكثير.

إشعار

لا يحتوي الإصدار 3.2 من Azure Cosmos DB ل MongoDB على خطط حالية لانتهاء العمر الافتراضي (EOL). الحد الأدنى لإشعار فترة الصلاحية المستقبلية هو ثلاث سنوات.

دعم البروتوكول

تتوافق جميع الحسابات الجديدة ل Azure Cosmos DB ل MongoDB مع إصدار خادم MongoDB 3.6. تغطي هذه المقالة الإصدار 3.2 من MongoDB. يتم سرد عوامل التشغيل المعتمدة وأي قيود أو استثناءات أدناه. يجب أن يكون أي برنامج تشغيل عميل يفهم هذه البروتوكولات قادرا على الاتصال ب Azure Cosmos DB ل MongoDB.

يوفر Azure Cosmos DB ل MongoDB أيضا تجربة ترقية سلسة للحسابات المؤهلة. تعرف على المزيد من المعلومات في دليل ترقية إصدار MongoDB.

دعم لغة الاستعلام

يوفر Azure Cosmos DB ل MongoDB دعما شاملا لبنى لغة استعلام MongoDB. ويمكنك العثور أدناه على قائمة مفصلة من العمليات المدعومة حاليًّا وعوامل التشغيل والمراحل والأوامر والخيارات.

أوامر قاعدة البيانات

يدعم Azure Cosmos DB ل MongoDB أوامر قاعدة البيانات التالية:

إشعار

يسرد هذا المقال أوامر الخادم المعتمدة فقط ويستبعد وظائف التضمين من جانب العميل. وظائف التضمين من جانب العميل مثل deleteMany() وupdateMany() تستخدم داخليًّا أوامر الخادم delete() وupdate(). الوظائف التي تستخدم أوامر الخادم المدعومة متوافقة مع Azure Cosmos DB ل MongoDB.

أوامر عملية الاستعلام والكتابة

  • delete
  • find
  • findAndModify
  • getLastError
  • getMore
  • insert
  • update

أوامر المصادقة

  • logout
  • authenticate
  • getnonce

أوامر الإدارة

  • dropDatabase
  • listCollections
  • drop
  • create
  • filemd5
  • createIndexes
  • listIndexes
  • dropIndexes
  • connectionStatus
  • reIndex

Diagnostics commands

  • buildInfo
  • collStats
  • dbStats
  • hostInfo
  • listDatabases
  • whatsmyuri

تدفق التجميع

أوامر التجميع

  • aggregate
  • count
  • distinct

مراحل التجميع

  • $project
  • $match
  • $limit
  • $skip
  • $unwind
  • $group
  • $sample
  • $sort
  • $lookup
  • $out
  • $count
  • $addFields

تعبيرات التجميع

التعبيرات المنطقية

  • $and
  • $or
  • $not

تعبيرات Set

  • $setEquals
  • $setIntersection
  • $setUnion
  • $setDifference
  • $setIsSubset
  • $anyElementTrue
  • $allElementsTrue

تعبيرات المقارنة

  • $cmp
  • $eq
  • $gt
  • $gte
  • $lt
  • $lte
  • $ne

التعبيرات الحسابية

  • $abs
  • $add
  • $ceil
  • $divide
  • $exp
  • $floor
  • $ln
  • $log
  • $log10
  • $mod
  • $multiply
  • $pow
  • $sqrt
  • $subtract
  • $trunc

تعبيرات السلسلة

  • $concat
  • $indexOfBytes
  • $indexOfCP
  • $split
  • $strLenBytes
  • $strLenCP
  • $strcasecmp
  • $substr
  • $substrBytes
  • $substrCP
  • $toLower
  • $toUpper

تعبيرات المصفوفة

  • $arrayElemAt
  • $concatArrays
  • $filter
  • $indexOfArray
  • $isArray
  • $range
  • $reverseArray
  • $size
  • $slice
  • $in

تعبيرات التاريخ

  • $dayOfYear
  • $dayOfMonth
  • $dayOfWeek
  • $year
  • $month
  • $week
  • $hour
  • $minute
  • $second
  • $millisecond
  • $isoDayOfWeek
  • $isoWeek

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

  • $cond
  • $ifNull

مراكم التجميع

  • $sum
  • $avg
  • $first
  • $last
  • $max
  • $min
  • $push
  • $addToSet

العوامل

يتم دعم عوامل التشغيل التالية مع الأمثلة المقابلة لاستخدامها. ضع في اعتبارك هذا المستند النموذجي المستخدم في الاستعلامات أدناه:

{
  "Volcano Name": "Rainier",
  "Country": "United States",
  "Region": "US-Washington",
  "Location": {
    "type": "Point",
    "coordinates": [
      -121.758,
      46.87
    ]
  },
  "Elevation": 4392,
  "Type": "Stratovolcano",
  "Status": "Dendrochronology",
  "Last Known Eruption": "Last known eruption from 1800-1899, inclusive"
}
عامل تشغيل مثال
eq { "Volcano Name": { $eq: "Rainier" } }
gt { "Elevation": { $gt: 4000 } }
gte { "Elevation": { $gte: 4392 } }
lt { "Elevation": { $lt: 5000 } }
lte { "Elevation": { $lte: 5000 } }
ne { "Elevation": { $ne: 1 } }
in { "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } }
nin { "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } }
or { $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] }
and { $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] }
not { "Elevation": { $not: { $gt: 5000 } } }
nor { $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] }
exists { "Status": { $exists: true } }
type { "Status": { $type: "string" } }
mod { "Elevation": { $mod: [ 4, 0 ] } }
regex { "Volcano Name": { $regex: "^Rain"} }

ملاحظات

في استعلامات $regex، تسمح التعبيرات ذات الارتساء الأيسر بالبحث في الفهرس. ومع ذلك، يؤدي استخدام المعدّل "i" (غير الحساس لحالة الأحرف الإنجليزية) والمعدّل "m" (متعدد الأسطر) إلى فحص المجموعة في جميع التعبيرات. عندما تكون هناك حاجة لتضمين '$' أو '|'، فمن الأفضل إنشاء استعلمين regex (أو أكثر). على سبيل المثال، بالنظر إلى الاستعلام الأصلي التالي: find({x:{$regex: /^abc$/})، يجب تعديله على النحو التالي:find({x:{$regex: /^abc/, x:{$regex:/^abc$/}}). يمكن أن يستخدم الجزء الأول الفهرس لتقييد البحث في تلك المستندات بدءًا من ‎^abc وسيطابق الجزء الثاني الإدخالات الدقيقة. يمثل العامل الشريطي "|" وظيفة "أو" - يطابق الاستعلام find({x:{$regex: /^abc|^def/}) المستندات حيث يحمل الحقل "x" قيمًا تبدأ بـ "abc" أو "def". لاستخدام الفهرس، يوصى بتقسيم الاستعلام إلى استعلامين مختلفين مرتبطين بواسطة $ أو عامل التشغيل: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

عوامل تشغيل التحديث

عوامل تشغيل تحديث الحقول

  • $inc
  • $mul
  • $rename
  • $setOnInsert
  • $set
  • $unset
  • $min
  • $max
  • $currentDate

عوامل تشغيل تحديث الصفيف

  • $addToSet
  • $pop
  • $pullAll
  • $pull (ملاحظة: $pull بشرط غير مدعوم)
  • $pushAll
  • $push
  • $each
  • $slice
  • $sort
  • $position

عامل تشغيل تحديث معالجة البت

  • $bit

عوامل تشغيل الجغرافية المكانية

عامل تشغيل مثال مدعوم
$geoWithin { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } ‏‏نعم‬
$geoIntersects { "Location.coordinates": { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } نعم
$near { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } نعم
$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } نعم
$geometry { "Location.coordinates": { $geoWithin: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } نعم
$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } نعم
$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } نعم
$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } نعم
$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } نعم
$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } نعم
$polygon { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } } ‏‏نعم‬

فرز العمليات

عند استخدام العملية، يتم دعم عمليات الفرز في حقل واحد، ولكن عمليات الفرز findOneAndUpdate في حقول متعددة غير مدعومة.

عوامل التشغيل الأخرى

عامل تشغيل مثال ملاحظات
$all { "Location.coordinates": { $all: [-121.758, 46.87] } }
$elemMatch { "Location.coordinates": { $elemMatch: { $lt: 0 } } }
$size { "Location.coordinates": { $size: 2 } }
$comment { "Location.coordinates": { $elemMatch: { $lt: 0 } }, $comment: "Negative values"}
$text ‏‏غير مدعومة. استخدم $regex بدلًا منها.

عوامل تشغيل غير مدعومة

$where عاملي التشغيل و $eval غير مدعومين من قبل Azure Cosmos DB.

الأساليب

الأساليب التالية مدعومة، وهي:

أسلوب المؤشر

الأسلوب مثال ملاحظات
cursor.sort() cursor.sort({ "Elevation": -1 }) لا يتم إرجاع المستندات التي لا تحتوي على مفتاح الفرز

الفهارس المميزة

يقوم Azure Cosmos DB بفهرسة كل حقل في المستندات المكتوبة في قاعدة البيانات بشكل افتراضي. تضمن الفهارس الفريدة عدم احتواء حقل معين على قيم مكررة عبر جميع المستندات في مجموعة ما، على غرار الطريقة التي يتم بها الحفاظ على التفرد في المفتاح _id الافتراضي. يمكنك إنشاء فهارس مخصصة في Azure Cosmos DB باستخدام الأمر createIndex، بما في ذلك القيد "الفريد".

تتوفر فهارس فريدة لجميع حسابات Azure Cosmos DB باستخدام Azure Cosmos DB ل MongoDB.

فترة البقاء (TTL)

يدعم Azure Cosmos DB مدة البقاء (TTL) فقط على مستوى المجموعة (_ts) في الإصدار 3.2. قم بالترقية إلى الإصدارات 3.6+ للاستفادة من أشكال TTL الأخرى.

المستخدم وإدارة الدور

لا يدعم Azure Cosmos DB المستخدمين والأدوار بعد. ومع ذلك، يدعم Azure Cosmos DB التحكم في الوصول المستند إلى الدور Azure (Azure RBAC) وكلمات المرور/المفاتيح للقراءة والكتابة والقراءة فقط التي يمكن الحصول عليها من خلال مدخل Microsoft Azure (صفحة سلسلة الاتصال).

النسخ المتماثل

يدعم Azure Cosmos DB النسخ المتماثل التلقائي الأصلي في أدنى المستويات. وتم توسيع هذا المنطق لتحقيق زمن الانتقال المنخفض، والنسخ المتماثل العالمي كذلك. لا يدعم Azure Cosmos DB أوامر النسخ المتماثل اليدوي.

مخاوف الكتابة

تعتمد بعض التطبيقات على كتابة استفسار الذي يحدد عدد الاستجابات المطلوبة أثناء عملية الكتابة. نظرا لكيفية معالجة Azure Cosmos DB للنسخ المتماثل في الخلفية، فإن جميع عمليات الكتابة تكون الحصة تلقائيا بشكل افتراضي. ويتم تجاهل أي مخاوف كتابة محددة بواسطة التعليمات البرمجية للعميل. تعرف على المزيد في استخدام مستويات التناسق لزيادة التوفر والأداء إلى أقصى حد.

التقسيم

يدعم Azure Cosmos DB التقسيم التلقائي من جانب الخادم. فهو يدير إنشاء الأقسام وتعيينها وتحقيق التوازن تلقائيًا. لا يدعم Azure Cosmos DB أوامر التقسيم اليدوي، ما يعني أنك لست مضطرا إلى استدعاء أوامر مثل shardCollection، addShard، balancerStart، moveChunk وما إلى ذلك. تحتاج فقط إلى تحديد مفتاح الجزء أثناء إنشاء الحاويات أو الاستعلام عن البيانات.

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