Bagikan melalui


Azure Cosmos DB untuk MongoDB (versi server 4.0): 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, enkripsi saat tidak aktif, 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 terhubung ke Azure Cosmos DB untuk MongoDB. Saat Anda membuat akun Azure Cosmos DB untuk 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 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.

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:

Perintah operasi kueri dan tulis

Perintah Didukung
change streams Ya
delete Ya
eval Tidak
find Ya
findAndModify Ya
getLastError Ya
getMore Ya
getPrevError Tidak
insert Ya
parallelCollectionScan Tidak
resetError Tidak
update Ya

Perintah transaksi

Perintah Didukung
abortTransaction Ya
commitTransaction Ya

Perintah autentikasi

Perintah Didukung
authenticate Ya
getnonce Ya
logout Ya

Perintah administrasi

Perintah Didukung
cloneCollectionAsCapped Tidak
collMod Tidak
connectionStatus Tidak
convertToCapped Tidak
copydb Tidak
create Ya
createIndexes Ya
currentOp Ya
drop 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
top Tidak
whatsmyuri Ya

Alur agregasi

Perintah agregasi

Perintah Didukung
aggregate Ya
count Ya
distinct 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
listSessions 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
lte Ya
ne Ya
in Ya
nin Ya

Ekspresi aritmetika

Perintah Didukung
abs Ya
add Ya
ceil Ya
divide Ya
exp Ya
floor Ya
ln Ya
log Ya
log10 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
rtrim 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
dateToParts 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
stdDevSamp Ya

Operator penggabungan

Perintah Didukung
mergeObjects Ya

Jenis data

Azure Cosmos DB for 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 titik akhir yang menjalankan 4.0+ mendapat manfaat dari pengoptimalan.

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

Dukungan dokumen 16 MB akan meningkatkan batas ukuran untuk dokumen Anda dari 2 MB menjadi 16 MB. Batas ini hanya berlaku bagi koleksi yang dibuat setelah fitur ini diaktifkan. Setelah fitur ini diaktifkan untuk akun database Anda, fitur ini tidak bisa dinonaktifkan.

Mengaktifkan 16 MB dapat dilakukan di tab fitur di portal Azure atau secara terprogram dengan menambahkan kemampuan "EnableMongo16MBDocumentSupport".

Sebaiknya aktifkan Server Side Retry dan hindari indeks wildcard untuk memastikan permintaan dengan dokumen yang lebih besar berhasil. Jika perlu, menaikkan RU DB/Koleksi Anda juga dapat membantu performa.

Perintah Didukung
Double Ya
String Ya
Object Ya
Array Ya
Binary Data Ya
ObjectId Ya
Boolean Ya
Date Ya
Null Ya
32-bit Integer (int) Ya
Timestamp Ya
64-bit Integer (long) Ya
MinKey Ya
MaxKey Ya
Decimal128 Ya
Regular Expression Ya
JavaScript Ya
JavaScript (with scope) Ya
Undefined 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 Tidak

Properti indeks

Perintah Didukung
TTL Ya
Unique Ya
Partial Tidak
Case Insensitive Tidak
Sparse 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 Ya
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
bitsAnySet Tidak
bitsAllClear Tidak
bitsAnyClear Tidak

Operator geospasial

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

Operasi pengurutan

Saat Anda menggunakan findOneAndUpdate operasi dengan API untuk MongoDB versi 4.0, operasi pengurutan pada satu bidang dan beberapa bidang didukung. Operasi pengurutan pada beberapa bidang adalah batasan protokol kawat sebelumnya.

Pengindeksan

API untuk MongoDB mendukung berbagai indeks untuk mengaktifkan pengurutan pada beberapa bidang, meningkatkan performa 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. Azure Cosmos DB tidak mendukung perintah replikasi manual.

Penulisan yang Dapat Coba Kembali

Penulisan yang dapat dicoba kembali memungkinkan driver MongoDB untuk secara otomatis mencoba kembali operasi tulis tertentu jika ada kegagalan, tetapi menghasilkan persyaratan yang lebih ketat untuk operasi tertentu, yang cocok dengan persyaratan protokol MongoDB. Dengan mengaktifkan fitur ini, operasi pembaruan, termasuk penghapusan, dalam koleksi pecahan akan memerlukan kunci shard untuk disertakan dalam filter kueri atau pernyataan pembaruan.

Misalnya, dengan koleksi pecahan, dipecah pada kunci "negara": Untuk menghapus semua dokumen dengan kota = "NYC" bidang, aplikasi harus menjalankan operasi untuk semua nilai kunci shard (negara) jika Penulisan yang dapat dicoba kembali diaktifkan.

  • db.coll.deleteMany({"country": "USA", "city": "NYC"}) - Sukses
  • db.coll.deleteMany({"city": "NYC"}) - Gagal dengan kesalahan ShardKeyNotFound(61)

Catatan

Penulisan yang dapat diulang tidak mendukung penulisan massal yang tidak diurutkan saat ini. Jika Anda ingin melakukan penulisan massal dengan penulisan yang dapat diulang diaktifkan, lakukan penulisan yang diurutkan secara massal.

Untuk mengaktifkan fitur tersebut, tambahkan kemampuan EnableMongoRetryableWrites ke akun database Anda. Fitur ini juga dapat diaktifkan di tab fitur di portal Azure.

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 waktu hidup (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 pecahan. 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 Azure (halaman String Koneksi).

Masalah Menulis

Beberapa aplikasi mengandalkan Masalah Menulis, 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.

Langkah berikutnya