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 bahwalettidak 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 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
$$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 Tidak

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"}) - 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 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, , balancerStartdan 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 (pada halaman String Koneksi ion).

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