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 for MongoDB memungkinkan penggunaan driver klien yang ada dengan mematuhi protokol kawat MongoDB.
Dengan menggunakan Azure Cosmos DB for 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 for 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 for MongoDB mendukung perintah database berikut:
Catatan
Artikel ini hanya mencantumkan perintah dari 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
Ekspresi 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 bersyarat
$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.
Jika perlu 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 "or" - 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/}] })
.
Update operators
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 _id
kunci 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.
Masalah Menulis
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. Semua masalah menulis yang ditentukan oleh kode klien diabaikan. Pelajari lebih lanjut dalam Menggunakan tingkat konsistensi untuk memaksimalkan ketersediaan dan performa.
Sharding
Azure Cosmos DB mendukung pemecahan otomatis, sisi server. 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
- Pelajari cara menggunakan Studio 3T dengan Azure Cosmos DB untuk MongoDB.
- Pelajari cara menggunakan Robo 3T dengan Azure Cosmos DB untuk MongoDB.
- Jelajahi sampel MongoDB dengan Azure Cosmos DB untuk MongoDB.