API Azure Cosmos DB untuk MongoDB (versi server 4.0): fitur dan sintaksis yang mendukung

BERLAKU UNTUK: Azure Cosmos DB API untuk MongoDB

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

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

Dukungan Protokol

Operator yang didukung dan batasan atau pengecualian apa pun tercantum di bawah ini. Setiap driver klien yang memahami protokol ini harus dapat tersambung ke Azure Cosmos DB API untuk MongoDB. Ketika menggunakan API Azure Cosmos DB untuk akun MongoDB, akun versi 3.6 memiliki titik akhir dalam format *.mongo.cosmos.azure.com sedangkan akun versi 3.2 memiliki titik akhir dalam format *.documents.azure.com.

Catatan

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

Dukungan bahasa kueri

API AZURE Cosmos DB untuk MongoDB memberikan 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

API Azure Cosmos DB untuk MongoDB mendukung perintah database berikut:

Perintah operasi kueri dan tulis

Perintah Didukung
change streams Ya
hapus Ya
eval Tidak
cari Ya
findAndModify Ya
getLastError Ya
getMore Ya
getPrevError Tidak
sisipkan Ya
parallelCollectionScan Tidak
resetError Tidak
update Ya

Perintah transaksi

Perintah Didukung
abortTransaction Ya
commitTransaction Ya

Perintah autentikasi

Perintah Didukung
autentikasi Ya
getnonce Ya
keluar Ya

Perintah administrasi

Perintah Didukung
cloneCollectionAsCapped Tidak
collMod Tidak
connectionStatus Tidak
convertToCapped Tidak
copydb Tidak
buat Ya
createIndexes Ya
currentOp Ya
hilangkan Ya
dropDatabase Ya
dropIndexes Ya
filemd5 Ya
killCursors Ya
killOp Tidak
listCollections Ya
listDatabases Ya
listIndexes Ya
reIndex Ya
renameCollection Tidak

Perintah diagnostik

Perintah Didukung
buildInfo Ya
collStats Ya
connPoolStats Tidak
connectionStatus Tidak
dataSize Tidak
dbHash Tidak
dbStats Ya
explain Ya
features Tidak
hostInfo Ya
listDatabases Ya
listCommands Tidak
profiler Tidak
serverStatus Tidak
teratas Tidak
whatsmyuri Ya

Alur agregasi

Perintah agregasi

Perintah Didukung
agregat Ya
hitung Ya
berbeda Ya
mapReduce Tidak

Tahap agregasi

Perintah Didukung
$addFields Ya
$bucket Tidak
$bucketAuto Tidak
$changeStream Ya
$collStats Tidak
$count Ya
$currentOp Tidak
$facet Ya
$geoNear Ya
$graphLookup Ya
$group Ya
$indexStats Tidak
$limit Ya
$listLocalSessions Tidak
$listLocalSessions Tidak
$lookup Sebagian
$match Ya
$out Ya
$project Ya
$redact Ya
$replaceRoot Ya
$replaceWith Tidak
$sample Ya
$skip Ya
$sort Ya
$sortByCount Ya
$unwind Ya

Catatan

$lookup belum mendukung fitur subkueri tidak terkait yang diperkenalkan di server versi 3.6. Anda akan menerima kesalahan dengan pesan yang berisi let is not supported jika Anda mencoba menggunakan operator $lookup dengan let dan bidang pipeline.

Ekspresi Boolean

Perintah Didukung
$and Ya
$not Ya
$or Ya

Ekspresi konversi

Perintah Didukung
$convert Ya
$toBool Ya
$toDate Ya
$toDecimal Ya
$toDouble Ya
$toInt Ya
$toLong Ya
$toObjectId Ya
$toString Ya

Set Ekspresi

Perintah Didukung
$setEquals Ya
$setIntersection Ya
$setUnion Ya
$setDifference Ya
$setIsSubset Ya
$anyElementTrue Ya
$allElementsTrue Ya

Ekspresi perbandingan

Catatan

API untuk MongoDB tidak mendukung ekspresi perbandingan dengan array literal dalam kueri.

Perintah Didukung
$cmp Ya
$eq Ya
$gt Ya
$gte Ya
$lt Ya
$lt Ya
$ne Ya
$in Ya
$in Ya

Ekspresi aritmetika

Perintah Didukung
$abs Ya
$add Ya
$ceil Ya
$divide Ya
$exp Ya
$floor Ya
$ln Ya
$log Ya
$log 10 Ya
$mod Ya
$multiply Ya
$pow Ya
$sqrt Ya
$subtract Ya
$trunc Ya

Ekspresi string

Perintah Didukung
$concat Ya
$indexOfBytes Ya
$indexOfCP Ya
$ltrim Ya
$ltrim Ya
$trim Ya
$split Ya
$strLenBytes Ya
$strLenCP Ya
$strcasecmp Ya
$substr Ya
$substrBytes Ya
$substrCP Ya
$toLower Ya
$toUpper Ya

Operator pencarian teks

Perintah Didukung
$meta Tidak

Ekspresi array

Perintah Didukung
$arrayElemAt Ya
$arrayToObject Ya
$concatArrays Ya
$filter Ya
$indexOfArray Ya
$isArray Ya
$objectToArray Ya
$range Ya
$reverseArray Ya
$reduce Ya
$size Ya
$slice Ya
$zip Ya
$in Ya

Operator variabel

Perintah Didukung
$map Ya
$let Ya

Variabel sistem

Perintah Didukung
$$CURRENT Ya
$$DESCEND Ya
$$KEEP Ya
$$PRUNE Ya
$$REMOVE Ya
$$ROOT Ya

Operator literal

Perintah Didukung
$literal Ya

Ekspresi tanggal

Perintah Didukung
$dayOfYear Ya
$dayOfMonth Ya
$dayOfWeek Ya
$year Ya
$month Ya
$week Ya
$hour Ya
$minute Ya
$second Ya
$millisecond Ya
$dateToString Ya
$isoDayOfWeek Ya
$isoWeek Ya
$dateFromParts Ya
$dateFromParts Ya
$dateFromString Ya
$isoWeekYear Ya

Ekspresi kondisional

Perintah Didukung
$cond Ya
$ifNull Ya
$switch Ya

Operator jenis data

Perintah Didukung
$type Ya

Ekspresi akumulator

Perintah Didukung
$sum Ya
$avg Ya
$first Ya
$last Ya
$max Ya
$min Ya
$push Ya
$addToSet Ya
$stdDevPop Ya
$stdDevPop Ya

Operator penggabungan

Perintah Didukung
$mergeObjects Ya

Jenis data

API Azure Cosmos DB untuk MongoDB mendukung dokumen yang dikodekan dalam format MongoDB BSON. API Versi 4.0 meningkatkan penggunaan internal format ini untuk meningkatkan performa dan mengurangi biaya. Dokumen yang ditulis atau diperbarui melalui endpoint yang menjalankan manfaat 4.0 dari ini.

Dalam skenario peningkatan, dokumen yang ditulis sebelum peningkatan ke versi 4.0 tidak akan mendapat manfaat dari performa yang ditingkatkan sampai diperbarui melalui operasi tulis melalui titik akhir 4.0.

Perintah Didukung
Ganda Ya
String Ya
Object Ya
Array Ya
Binary Data Ya
ObjectId Ya
Boolean Ya
Tanggal Ya
Null Ya
32-bit Integer (int) Ya
Tanda waktu Ya
64-bit Integer (long) Ya
MinKey Ya
MaxKey Ya
Decimal128 Ya
Ekspresi Reguler Ya
JavaScript Ya
JavaScript (dengan lingkup) Ya
Tidak ditentukan Ya

Indeks dan properti indeks

Indeks

Perintah Didukung
Single Field Index Ya
Compound Index Ya
Multikey Index Ya
Text Index Tidak
2dsphere Ya
2d Index Tidak
Hashed Index Ya

Properti indeks

Perintah Didukung
TTL Ya
Unik Ya
Sebagian Tidak
Case Insensitive Tidak
Jarang Tidak
Background Ya

Operator

Operator logika

Perintah Didukung
$or Ya
$and Ya
$not Ya
$nor Ya

Operator elemen

Perintah Didukung
$exists Ya
$type Ya

Operator kueri evaluasi

Perintah Didukung
$expr Tidak
$jsonSchema Tidak
$mod Ya
$regex Ya
$text Tidak (Tidak didukung. Gunakan $regex sebagai gantinya.)
$where Tidak

Dalam kueri $regex, ekspresi berjangkar 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$/}), harus dimodifikasi 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/}] }).

Operator array

Perintah Didukung
$all Ya
$elemMatch Ya
$size Ya

Operator komentar

Perintah Didukung
$comment Ya

Operator proyeksi

Perintah Didukung
$elemMatch Ya
$meta Tidak
$slice Ya

Perbarui operator

Operator pembaruan bidang

Perintah Didukung
$inc Ya
$mul Ya
$rename Ya
$setOnInsert Ya
$set Ya
$unset Ya
$min Ya
$max Ya
$currentDate Ya

Operator pembaruan array

Perintah Didukung
$ Ya
$[] Ya
$[<identifier>] Ya
$addToSet Ya
$pop Ya
$pullAll Ya
$pull Ya
$push Ya
$pushAll Ya

Perbarui pengubah

Perintah Didukung
$each Ya
$slice Ya
$sort Ya
$position Ya

Operator pembaruan bitwise

Perintah Didukung
$bit Ya
$bitsAllSet Tidak
$bitsAllSet Tidak
$bitsAllClear Tidak
$bitsAllClear Tidak

Operator geospasial

Operator Didukung
$geoWithin Ya
$geoIntersects Ya
$dekat Ya
$nearSphere Ya
$geometry Ya
$minDistance Ya
$minDistance Ya
$center Tidak
$centerSphere Tidak
$box Tidak
$polygon Tidak

Operasi pengurutan

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

Pengindeksan

API untuk MongoDB mendukung berbagai indeks untuk memungkinkan pengurutan pada beberapa bidang, meningkatkan kinerja kueri, dan menerapkan keunikan.

GridFS

Azure Cosmos DB mendukung GridFS melalui driver Mongo yang kompatibel dengan GridFS.

Replikasi

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

Penulisan yang Dapat Coba Kembali

Azure Cosmos DB belum mendukung penulisan yang dapat dicocokkan kembali. Driver klien harus menambahkan parameter URL 'retryWrites=false' ke string koneksi mereka. Parameter URL lainnya dapat ditambahkan dengan awalan dengan '&'.

Sharding

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 addShard, balancerStart, moveChunk, dll. Anda hanya perlu menentukan kunci shard saat membuat kontainer atau mengkueri data.

Sesi

Azure Cosmos DB belum mendukung perintah sesi sisi server.

Waktu hidup (detik)

Azure Cosmos DB mendukung time-to-live (TTL) berdasarkan tanda waktu dokumen. TTL dapat diaktifkan untuk koleksi dengan masuk ke portal Microsoft Azure.

Transaksi

Transaksi multi-dokumen didukung dalam koleksi yang tidak di-sharding. Transaksi multi-dokumen tidak didukung di seluruh koleksi atau dalam koleksi di-sharding. Batas waktu transaksi adalah 5 detik tetap.

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 Microsoft Azure (halaman String Koneksi).

Masalah Menulis

Beberapa aplikasi mengandalkan Masalah Menulis, yang menentukan jumlah respons yang diperlukan selama operasi tulis. Karena bagaimana Cosmos DB menangani replikasi di latar belakang semua tulisan semuanya 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.

Langkah berikutnya