Azure Cosmos DB for MongoDB (versi 3.2): fitur dan sintaks yang didukung

BERLAKU UNTUK: MongoDB

Azure Cosmos DB adalah layanan database multi-model Microsoft yang didistribusikan secara global. Anda dapat berkomunikasi dengan Azure Cosmos DB untuk MongoDB menggunakan salah satu driver klien MongoDB sumber terbuka. Azure Cosmos DB untuk MongoDB memungkinkan penggunaan driver klien yang ada dengan mematuhi protokol kawat MongoDB.

Dengan menggunakan Azure Cosmos DB untuk MongoDB, Anda dapat menikmati manfaat MongoDB yang biasa Anda gunakan, dengan semua kemampuan perusahaan yang disediakan Azure Cosmos DB: distribusi global, sharding otomatis, jaminan ketersediaan dan latensi, pengindeksan otomatis setiap bidang, enkripsi saat tidak aktif, cadangan, dan banyak lagi.

Catatan

Versi 3.2 dari Azure Cosmos DB untuk MongoDB tidak memiliki rencana saat ini untuk akhir masa pakai (EOL). Pemberitahuan minimum untuk EOL di masa depan adalah tiga tahun.

Dukungan Protokol

Semua akun baru untuk Azure Cosmos DB for MongoDB kompatibel dengan server MongoDB versi 3.6. Artikel ini membahas MongoDB versi 3.2. Operator pendukung dan batasan atau pengecualian apa pun tercantum di bawah ini. Setiap driver klien yang memahami protokol ini harus dapat terhubung ke Azure Cosmos DB untuk MongoDB.

Azure Cosmos DB for MongoDB juga menawarkan pengalaman peningkatan yang mulus untuk akun yang memenuhi syarat. Pelajari selengkapnya tentang Panduan peningkatan versi MongoDB.

Dukungan bahasa kueri

Azure Cosmos DB untuk MongoDB menyediakan dukungan komprehensif untuk konstruksi bahasa kueri MongoDB. Di bawah ini Anda dapat menemukan daftar terperinci operasi, operator, tahapan, perintah, dan opsi yang saat ini didukung.

Perintah database

Azure Cosmos DB untuk MongoDB mendukung perintah database berikut:

Catatan

Artikel ini hanya mencantumkan perintah server yang didukung dan mengecualikan fungsi pembungkus sisi klien. Fungsi pembungkus sisi klien seperti deleteMany() dan updateMany() secara internal menggunakan perintah server delete() dan update(). Fungsi yang menggunakan perintah server yang didukung kompatibel dengan Azure Cosmos DB untuk MongoDB.

Perintah operasi kueri dan tulis

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

Perintah autentikasi

  • logout
  • authenticate
  • getnonce

Perintah administrasi

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

Perintah diagnostik

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

Alur agregasi

Perintah agregasi

  • aggregate
  • count
  • distinct

Tahap agregasi

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

Ekspresi agregasi

Ungkapan Boolean

  • $and
  • $or
  • $not

Set Ekspresi

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

Ekspresi perbandingan

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

Ekspresi aritmetika

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

Ekspresi string

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

Ekspresi array

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

Ekspresi tanggal

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

Ekspresi kondisional

  • $cond
  • $ifNull

Akumulator agregasi

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

Operator

Operator berikut didukung dengan contoh penggunaannya yang sesuai. Pertimbangkan contoh dokumen ini yang digunakan dalam kueri di bawah ini:

{
  "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"
}
Operator Contoh
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"} }

Catatan

Dalam kueri $regex, ekspresi jangkar kiri memungkinkan pencarian indeks. Namun, menggunakan pengubah 'i' (tidak peka huruf besar/kecil) dan pengubah 'm' (multibaris) menyebabkan pemindaian kumpulan di semua ekspresi. Ketika ada kebutuhan untuk menyertakan '$' atau '|', yang terbaik adalah membuat dua (atau lebih) kueri regex. Misalnya, dalam kueri asli berikut: find({x:{$regex: /^abc$/}), modifikasinya harus sebagai berikut: find({x:{$regex: /^abc/, x:{$regex:/^abc$/}}). Bagian pertama akan menggunakan indeks untuk membatasi pencarian ke dokumen yang dimulai dengan ^abc dan bagian kedua akan cocok dengan entri yang tepat. Operator bilah '|' bertindak sebagai fungsi "atau" - kueri find({x:{$regex: /^abc|^def/}) cocok dengan dokumen di mana bidang 'x' memiliki nilai yang dimulai dengan "abc" atau "def". Untuk menggunakan indeks, disarankan untuk memecah kueri menjadi dua kueri berbeda yang digabungkan oleh operator $or: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Perbarui operator

Operator pembaruan bidang

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

Operator pembaruan array

  • $addToSet
  • $pop
  • $pullAll
  • $pull (Catatan: $pull dengan kondisi tidak didukung)
  • $pushAll
  • $push
  • $each
  • $slice
  • $sort
  • $position

Operator pembaruan bitwise

  • $bit

Operator geospasial

Operator Contoh Didukung
$geoWithin { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Ya
$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 ] ] ] } } } } Ya
$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 ] ] ] } } } } Ya
$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Ya
$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 ] ] ] } } } } Ya
$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } Ya
$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Ya
$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } Ya
$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Ya
$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } Ya
$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 ] ] ] } } } } Ya

Urutkan operasi

Saat Anda menggunakan operasi, findOneAndUpdate operasi pengurutan pada satu bidang didukung, tetapi operasi pengurutan pada beberapa bidang tidak didukung.

Operator lain

Operator Contoh Catatan
$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 Tidak didukung. Gunakan $regex sebagai gantinya.

Operator yang tidak didukung

Operator $where dan $eval tidak didukung oleh Azure Cosmos DB.

Metode

Metode berikut didukung:

Metode kursor

Metode Contoh Catatan
cursor.sort() cursor.sort({ "Elevation": -1 }) Dokumen tanpa kunci pengurutan tidak dikembalikan

Indeks unik

Azure Cosmos DB mengindeks setiap bidang dalam dokumen yang ditulis ke database secara default. Indeks unik memastikan bahwa bidang tertentu tidak memiliki nilai duplikat di semua dokumen dalam sebuah koleksi, serupa dengan cara keunikan dipertahankan pada _idkunci default. Anda dapat membuat indeks kustom di Azure Cosmos DB dengan menggunakan perintah createIndex, termasuk batasan 'unik'.

Indeks unik tersedia untuk semua akun Azure Cosmos DB menggunakan Azure Cosmos DB untuk MongoDB.

Waktu hidup (detik)

Azure Cosmos DB hanya mendukung time-to-live (TTL) di tingkat koleksi (_ts) di versi 3.2. Tingkatkan ke versi 3.6+ untuk memanfaatkan bentuk TTL lainnya.

Manajemen pengguna dan peran

Azure Cosmos DB belum mendukung pengguna dan peran. Namun, Azure Cosmos DB mendukung kontrol akses berbasis peran Azure (Azure RBAC) dan kata sandi/kunci baca-tulis dan baca-saja yang dapat diperoleh melalui portal Azure (halaman String Koneksi).

Replikasi

Azure Cosmos DB mendukung replikasi asli otomatis pada lapisan terendah. Logika ini diperluas untuk mencapai latensi rendah, replikasi global juga. Azure Cosmos DB tidak mendukung perintah replikasi manual.

Tulis Kekhawatiran

Beberapa aplikasi mengandalkan Tulis Kekhawatiran, yang menentukan jumlah respons yang diperlukan selama operasi tulis. Karena bagaimana Azure Cosmos DB menangani replikasi di latar belakang semua tulisan secara otomatis Kuorum secara default. Setiap masalah tulis yang ditentukan oleh kode klien diabaikan. Pelajari lebih lanjut dalam Menggunakan tingkat konsistensi untuk memaksimalkan ketersediaan dan performa.

Pecahan

Azure Cosmos DB mendukung pecahan sisi server otomatis. Ini mengelola pembuatan, penempatan, dan penyeimbangan shard secara otomatis. Azure Cosmos DB tidak mendukung perintah sharding manual, yang berarti Anda tidak perlu memanggil perintah seperti shardCollection, addShard, balancerStart, moveChunk, dll. Anda hanya perlu menentukan kunci shard saat membuat kontainer atau mengkueri data.

Langkah berikutnya