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 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, enkripsi saat tidak aktif, cadangan, dan banyak lagi.
Dukungan Protokol
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. Saat Anda membuat 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 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.
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:
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
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
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 |
Ya |
group |
Ya |
indexStats |
No |
limit |
Ya |
listLocalSessions |
No |
listSessions |
Tidak |
lookup |
Sebagian |
match |
Ya |
out |
Ya |
project |
Ya |
redact |
Ya |
replaceRoot |
Ya |
replaceWith |
No |
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 |
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 |
---|---|
$$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 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. 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+ manfaat dari pengoptimalan.
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 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 |
No |
2dsphere |
Ya |
2d Index |
No |
Hashed Index |
Tidak |
Properti indeks
Perintah | Didukung |
---|---|
TTL |
Ya |
Unique |
Ya |
Partial |
No |
Case Insensitive |
No |
Sparse |
No |
Background |
Ya |
Operator
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 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.
Jika perlu 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 "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/}] })
.
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 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"})
- 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 di tab fitur di portal Azure.
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 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. Semua masalah menulis yang ditentukan oleh kode klien diabaikan. Pelajari lebih lanjut dalam 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, baca tentang memperkirakan unit permintaan menggunakan vCore atau vCPU
- Jika Anda mengetahui rasio permintaan umum untuk beban kerja database Anda saat ini, baca memperkirakan unit permintaan menggunakan perencana kapasitas Azure Cosmos DB
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk