Azure Cosmos DB for MongoDB (versi server 4.2): Fitur dan sintaks yang didukung
BERLAKU UNTUK: MongoDB
Azure Cosmos DB adalah layanan database multi-model yang didistribusikan secara global oleh Microsoft. Azure Cosmos DB menawarkan beberapa API database. Anda dapat berkomunikasi dengan Azure Cosmos DB untuk MongoDB dengan menggunakan salah satu driver klien MongoDB sumber terbuka. Azure Cosmos DB for MongoDB mendukung 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 tidak aktif, cadangan, dan banyak lagi.
Dukungan protokol
Operator yang didukung dan batasan atau pengecualian apa pun tercantum dalam artikel ini. Setiap driver klien yang memahami protokol ini harus dapat terhubung ke Azure Cosmos DB untuk MongoDB. Saat Anda membuat Azure Cosmos DB untuk akun MongoDB, akun versi 3.6+ memiliki titik akhir dalam format *.mongo.cosmos.azure.com
. 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 delete()
perintah server dan update()
. Fungsi yang menggunakan perintah server yang didukung kompatibel dengan Azure Cosmos DB untuk MongoDB.
Dukungan bahasa kueri
Azure Cosmos DB for MongoDB menyediakan dukungan komprehensif untuk konstruksi bahasa kueri MongoDB. Di bagian berikut, 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.
Perintah operasi kueri dan tulis
Perintah | Didukung |
---|---|
change streams |
Ya |
delete |
Ya |
eval |
No |
find |
Ya |
findAndModify |
Ya |
getLastError |
Ya |
getMore |
Ya |
getPrevError |
No |
insert |
Ya |
parallelCollectionScan |
No |
resetError |
No |
update |
Ya |
Perintah transaksi
Catatan
Transaksi multi-dokumen hanya didukung dalam satu koleksi yang tidak dipecah. Transaksi multi-dokumen lintas-koleksi dan lintas-shard belum didukung di API untuk MongoDB.
Perintah | Didukung |
---|---|
abortTransaction |
Ya |
commitTransaction |
Ya |
Perintah autentikasi
Perintah | Didukung |
---|---|
authenticate |
Ya |
getnonce |
Ya |
logout |
Ya |
Perintah administrasi
Perintah | Didukung |
---|---|
cloneCollectionAsCapped |
Tidak |
collMod |
No |
connectionStatus |
No |
convertToCapped |
No |
copydb |
No |
create |
Ya |
createIndexes |
Ya |
currentOp |
Ya |
drop |
Ya |
dropDatabase |
Ya |
dropIndexes |
Ya |
filemd5 |
Ya |
killCursors |
Ya |
killOp |
No |
listCollections |
Ya |
listDatabases |
Ya |
listIndexes |
Ya |
reIndex |
Ya |
renameCollection |
Tidak |
Perintah diagnostik
Perintah | Didukung |
---|---|
buildInfo |
Ya |
collStats |
Ya |
connPoolStats |
No |
connectionStatus |
No |
dataSize |
No |
dbHash |
No |
dbStats |
Ya |
explain |
Ya |
features |
No |
hostInfo |
Ya |
listDatabases |
Ya |
listCommands |
No |
profiler |
No |
serverStatus |
No |
top |
No |
whatsmyuri |
Ya |
Alur agregasi
Azure Cosmos DB for MongoDB mendukung perintah agregasi berikut.
Perintah agregasi
Perintah | Didukung |
---|---|
aggregate |
Ya |
count |
Ya |
distinct |
Ya |
mapReduce |
Tidak |
Tahap agregasi
Perintah | Didukung |
---|---|
addFields |
Ya |
bucket |
No |
bucketAuto |
No |
changeStream |
Ya |
collStats |
No |
count |
Ya |
currentOp |
No |
facet |
Ya |
geoNear |
Ya |
graphLookup |
No |
group |
Ya |
indexStats |
No |
limit |
Ya |
listLocalSessions |
No |
listSessions |
Tidak |
lookup |
Sebagian |
match |
Ya |
merge |
Ya |
out |
Ya |
planCacheStats |
Ya |
project |
Ya |
redact |
Ya |
regexFind |
Ya |
regexFindAll |
Ya |
regexMatch |
Ya |
replaceRoot |
Ya |
replaceWith |
Ya |
sample |
Ya |
set |
Ya |
skip |
Ya |
sort |
Ya |
sortByCount |
Ya |
unset |
Ya |
unwind |
Ya |
Catatan
Agregasi $lookup
belum mendukung fitur subkueri yang tidak terkait yang diperkenalkan di server versi 3.6. Jika Anda mencoba menggunakan $lookup
operator dengan let
bidang dan pipeline
, pesan kesalahan yang menunjukkan bahwalet
tidak didukung muncul.
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 yang memiliki array harfiah 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 |
round |
Ya |
sqrt |
Ya |
subtract |
Ya |
trunc |
Ya |
Ekspresi trigonometri
Perintah | Didukung |
---|---|
acos |
Ya |
acosh |
Ya |
asin |
Ya |
asinh |
Ya |
atan |
Ya |
atan2 |
Ya |
atanh |
Ya |
cos |
Ya |
cosh |
Ya |
degreesToRadians |
Ya |
radiansToDegrees |
Ya |
sin |
Ya |
sinh |
Ya |
tan |
Ya |
tanh |
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 |
No |
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 |
---|---|
$$CLUSTERTIME |
Ya |
$$CURRENT |
Ya |
$$DESCEND |
Ya |
$$KEEP |
Ya |
$$NOW |
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 bersyarat
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. Versi 4.0 dan yang lebih baru (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+ manfaat dari pengoptimalan 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+.
Dukungan dokumen 16 MB akan meningkatkan batas ukuran untuk dokumen Anda dari 2 MB menjadi 16 MB. Batas ini hanya berlaku untuk koleksi yang dibuat setelah fitur ini diaktifkan. Saat fitur ini diaktifkan untuk akun database Anda, fitur ini tidak dapat dinonaktifkan.
Untuk mengaktifkan dukungan dokumen 16-MB, ubah pengaturan pada tab Fitur untuk sumber daya di portal Azure atau tambahkan EnableMongo16MBDocumentSupport
kemampuan secara terprogram.
Kami menyarankan agar Anda mengaktifkan Server Side Retry dan menghindari penggunaan indeks kartubebas untuk memastikan bahwa permintaan dalam dokumen yang lebih besar berhasil. Menaikkan database atau unit permintaan pengumpulan Anda mungkin juga 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
Azure Cosmos DB for MongoDB mendukung perintah indeks dan properti indeks berikut.
Indeks
Perintah | Didukung |
---|---|
Single Field Index |
Ya |
Compound Index |
Ya |
Multikey Index |
Ya |
Text Index |
No |
2dsphere |
Ya |
2d Index |
No |
Hashed Index |
Tidak |
Properti indeks
Perintah | Didukung |
---|---|
TTL |
Ya |
Unique |
Ya |
Partial |
Hanya didukung untuk indeks unik |
Case Insensitive |
Tidak |
Sparse |
No |
Background |
Ya |
Operator
Azure Cosmos DB for MongoDB mendukung operator berikut.
Operator logis
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 |
No |
mod |
Ya |
regex |
Ya |
text |
Tidak (Tidak didukung. Gunakan $regex sebagai gantinya.) |
where |
No |
Dalam $regex
kueri, ekspresi berlabuh kiri memungkinkan pencarian indeks. Namun, menggunakan pengubah i
(tidak peka huruf besar/kecil) dan m
pengubah (multibaris) menyebabkan koleksi memindai di semua ekspresi.
Ketika ada kebutuhan untuk menyertakan $
atau |
, yang terbaik adalah membuat dua (atau lebih) $regex
kueri.
Misalnya, ubah kueri asli berikut:
find({x:{$regex: /^abc$/})
Untuk kueri ini:
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
Bagian pertama dari kueri yang dimodifikasi menggunakan indeks untuk membatasi pencarian ke dokumen yang dimulai dengan ^abc
. Bagian kedua kueri cocok dengan entri yang tepat. Operator batang (|
) 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, kami sarankan Anda memecah kueri menjadi dua kueri berbeda yang digabungkan oleh $or
operator: 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 |
No |
slice |
Ya |
Update operators
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 |
No |
bitsAnySet |
No |
bitsAllClear |
No |
bitsAnyClear |
Tidak |
Operator geospasial
Operator | Didukung |
---|---|
$geoWithin |
Ya |
$geoIntersects |
Ya |
$near |
Ya |
$nearSphere |
Ya |
$geometry |
Ya |
$minDistance |
Ya |
$maxDistance |
Ya |
$center |
No |
$centerSphere |
No |
$box |
No |
$polygon |
Tidak |
Operasi pengurutan
Saat Anda menggunakan operasi, findOneAndUpdate
operasi pengurutan pada satu bidang didukung. Operasi pengurutan pada beberapa bidang tidak didukung.
Pengindeksan
API untuk MongoDB mendukung berbagai indeks untuk mengaktifkan pengurutan pada beberapa bidang, meningkatkan performa kueri, dan menerapkan keunikan.
Enkripsi tingkat bidang sisi klien
Enkripsi bidang tingkat klien adalah fitur driver dan kompatibel dengan API untuk MongoDB. Enkripsi eksplisit, di mana driver secara eksplisit mengenkripsi setiap bidang saat ditulis, didukung. Enkripsi otomatis tidak didukung. Dekripsi eksplisit dan dekripsi otomatis didukung.
mongocryptd
tidak boleh dijalankan karena tidak diperlukan untuk melakukan salah satu operasi yang didukung.
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 juga diperluas untuk mencapai latensi rendah, replikasi global. Azure Cosmos DB tidak mendukung perintah replikasi manual.
Penulisan yang dapat diulang
Fitur tulis yang dapat diulang memungkinkan driver MongoDB untuk secara otomatis mencoba kembali operasi tulis tertentu. Fitur ini menghasilkan persyaratan yang lebih ketat untuk operasi tertentu, yang cocok dengan persyaratan protokol MongoDB. Dengan fitur ini diaktifkan, operasi pembaruan, termasuk penghapusan, dalam koleksi pecahan mengharuskan kunci shard disertakan dalam filter kueri atau pernyataan pembaruan.
Misalnya, dengan koleksi pecahan yang dipecah pada "country"
kunci, untuk menghapus semua dokumen yang memiliki bidang "city" = "NYC"
, aplikasi perlu menjalankan operasi untuk semua nilai kunci shard ("country"
) jika fitur penulisan yang dapat dicoba kembali diaktifkan.
db.coll.deleteMany({"country": "USA", "city": "NYC"})
- Keberhasilandb.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 pada tab Fitur di portal Azure.
Sharding
Azure Cosmos DB mendukung pemecahan otomatis, sisi server. Ini secara otomatis mengelola pembuatan shard, penempatan, dan penyeimbangan. Azure Cosmos DB tidak mendukung perintah sharding manual, yang berarti Anda tidak perlu memanggil perintah seperti addShard
, , balancerStart
dan moveChunk
. Anda perlu menentukan kunci shard hanya saat membuat kontainer atau mengkueri data.
Sesi
Azure Cosmos DB belum mendukung perintah sesi sisi server.
Time to live
Azure Cosmos DB mendukung Time to Live (TTL) yang didasarkan pada stempel waktu dokumen. Anda dapat mengaktifkan TTL untuk koleksi di portal Azure.
TTL Kustom
Fitur ini menyediakan kemampuan untuk mengatur TTL kustom pada satu bidang dalam koleksi.
Pada koleksi yang mengaktifkan TTL pada bidang:
Jenis yang dapat diterima adalah jenis data BSON dan jenis numerik (bilangan bulat, panjang, atau ganda), yang akan ditafsirkan sebagai stempel waktu milidetik Unix untuk menentukan kedaluwarsa.
Jika bidang TTL adalah array, maka elemen terkecil dari array yang merupakan jenis yang dapat diterima dianggap untuk kedaluwarsa dokumen.
Jika bidang TTL hilang dari dokumen, dokumen tidak akan kedaluwarsa.
Jika bidang TTL bukan tipe yang dapat diterima, dokumen tidak akan kedaluwarsa.
Batasan TTL kustom
Hanya satu bidang dalam koleksi yang dapat mengatur TTL di dalamnya.
Dengan kumpulan bidang TTL kustom, bidang tidak dapat digunakan untuk kedaluwarsa
\_ts
dokumen.Anda tidak dapat menggunakan
\_ts
bidang sebagai tambahan.
Konfigurasi
Anda dapat mengaktifkan TTL kustom dengan memperbarui EnableTtlOnCustomPath
kemampuan untuk akun tersebut. Pelajari cara mengonfigurasi kemampuan.
Menyiapkan TTL
Untuk menyiapkan TTL, jalankan perintah ini: db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})
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.
Kelola 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 baca-tulis dan baca-saja dan kunci yang dapat diperoleh melalui portal Azure (di halaman String Koneksi).
Menulis kekhawatiran
Beberapa aplikasi mengandalkan kekhawatiran tulis, yang menentukan jumlah respons yang diperlukan selama operasi tulis. Karena bagaimana Azure Cosmos DB menangani replikasi di latar belakang, semua penulisan secara otomatis Kuorum secara default. Setiap masalah tulis yang ditentukan oleh kode klien diabaikan. Pelajari cara menggunakan tingkat konsistensi untuk memaksimalkan ketersediaan dan performa.
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.
- Mencoba melakukan perencanaan kapasitas untuk migrasi ke Azure Cosmos DB? Anda dapat menggunakan informasi tentang kluster database Anda yang ada saat ini untuk membuat perencanaan kapasitas.
- Jika Anda hanya mengetahui jumlah vCore dan server di kluster database yang ada, bacalah tentang memperkirakan unit permintaan menggunakan vCore atau vCPU.
- Jika Anda mengetahui tingkat permintaan umum untuk beban kerja database Anda saat ini, baca tentang memperkirakan unit permintaan dengan menggunakan perencana kapasitas Azure Cosmos DB.