MongoDB 4.2 sunucu sürümü için Azure Cosmos DB'de desteklenen özellikler ve söz dizimi

Important

Mevcut bir MongoDB uygulamasını geçirmek mi yoksa MongoDB Sorgu Dili (MQL) özelliklerini kullanmak mı istiyorsunuz? Azure DocumentDB'ye göz atın.

99,999% kullanılabilirlik hizmet düzeyi sözleşmesi (SLA), anında otomatik ölçeklendirme ve birden çok bölgede otomatik yük devretme ile yüksek ölçekli senaryolar için bir veritabanı çözümü mü arıyorsunuz? NoSQL için Azure Cosmos DB'yi göz önünde bulundurun.

MongoDB 4.2 için Azure Cosmos DB, genel dağıtım, otomatik parçalama ve yüksek kullanılabilirlik gibi kurumsal sınıf özelliklerle tanıdık MongoDB özelliklerini kullanmanızı sağlar. Bu makalede MongoDB 4.2 için Azure Cosmos DB kullanmanın desteklenen özellikleri, söz dizimi ve avantajları açıklanmaktadır.

Protokol desteği

Desteklenen işleçler ve tüm sınırlamalar veya özel durumlar bu makalede listelenmiştir. Bu protokolleri anlayan tüm istemci sürücülerinin MongoDB için Azure Cosmos DB'ye bağlanabilmesi gerekir. MongoDB hesapları için Azure Cosmos DB oluşturduğunuzda, 3.6+ sürümündeki hesapların *.mongo.cosmos.azure.com biçiminde bir uç noktası vardır. Hesapların 3.2 sürümünde bir uç nokta *.documents.azure.com biçimindedir.

Note

Bu makalede yalnızca desteklenen sunucu komutları listelenir ve istemci tarafı sarmalayıcı işlevleri dışlanır. İstemci tarafı sarmalayıcı işlevleri, deleteMany() ve updateMany() içsel olarak delete() ve update() sunucu komutlarını kullanır. Desteklenen sunucu komutlarını kullanan işlevler MongoDB için Azure Cosmos DB ile uyumludur.

Sorgu dili desteği

MongoDB için Azure Cosmos DB, MongoDB sorgu dili yapıları için kapsamlı destek sağlar. Aşağıdaki bölümlerde, şu anda desteklenen işlemlerin, işleçlerin, aşamaların, komutların ve seçeneklerin ayrıntılı listesini bulabilirsiniz.

Veritabanı komutları

MongoDB için Azure Cosmos DB aşağıdaki veritabanı komutlarını destekler.

Sorgulama ve yazma işlemi komutları

Destekleniyor
change streams ✅ Evet
delete ✅ Evet
eval ✖️ Hayır
find ✅ Evet
findAndModify ✅ Evet
getLastError ✅ Evet
getMore ✅ Evet
getPrevError ✖️ Hayır
insert ✅ Evet
parallelCollectionScan ✖️ Hayır
resetError ✖️ Hayır
update ✅ Evet

İşlem komutları

Note

Çok belgeli işlemler yalnızca parçalanmamış tek bir koleksiyon içinde desteklenir. MongoDB API'sinde çapraz toplama ve parçalar arası çok belgeli işlemler henüz desteklenmemektedir.

Destekleniyor
abortTransaction ✅ Evet
commitTransaction ✅ Evet

Kimlik doğrulama komutları

Destekleniyor
authenticate ✅ Evet
getnonce ✅ Evet
logout ✅ Evet

Yönetim komutları

Destekleniyor
cloneCollectionAsCapped ✖️ Hayır
collMod ✖️ Hayır
connectionStatus ✖️ Hayır
convertToCapped ✖️ Hayır
copydb ✖️ Hayır
create ✅ Evet
createIndexes ✅ Evet
currentOp ✅ Evet
drop ✅ Evet
dropDatabase ✅ Evet
dropIndexes ✅ Evet
filemd5 ✅ Evet
killCursors ✅ Evet
killOp ✖️ Hayır
listCollections ✅ Evet
listDatabases ✅ Evet
listIndexes ✅ Evet
reIndex ✅ Evet
renameCollection ✖️ Hayır

Tanılama komutları

Destekleniyor
buildInfo ✅ Evet
collStats ✅ Evet
connPoolStats ✖️ Hayır
connectionStatus ✖️ Hayır
dataSize ✖️ Hayır
dbHash ✖️ Hayır
dbStats ✅ Evet
explain ✅ Evet
features ✖️ Hayır
hello ✅ Evet
hostInfo ✅ Evet
listDatabases ✅ Evet
listCommands ✖️ Hayır
profiler ✖️ Hayır
serverStatus ✖️ Hayır
top ✖️ Hayır
whatsmyuri ✅ Evet

Toplama ardışık düzeni

MongoDB için Azure Cosmos DB aşağıdaki toplama komutlarını destekler.

Toplama komutları

Destekleniyor
aggregate ✅ Evet
count ✅ Evet
distinct ✅ Evet
mapReduce ✖️ Hayır

Toplama aşamaları

Destekleniyor
addFields ✅ Evet
bucket ✖️ Hayır
bucketAuto ✖️ Hayır
changeStream ✅ Evet
collStats ✖️ Hayır
count ✅ Evet
currentOp ✖️ Hayır
facet ✅ Evet
geoNear ✅ Evet
graphLookup ✖️ Hayır
group ✅ Evet
indexStats ✖️ Hayır
limit ✅ Evet
listLocalSessions ✖️ Hayır
listSessions ✖️ Hayır
lookup ❓Kısmi
match ✅ Evet
merge ✅ Evet
out ✅ Evet
planCacheStats ✅ Evet
project ✅ Evet
redact ✅ Evet
regexFind ✅ Evet
regexFindAll ✅ Evet
regexMatch ✅ Evet
replaceRoot ✅ Evet
replaceWith ✅ Evet
sample ✅ Evet
set ✅ Evet
skip ✅ Evet
sort ✅ Evet
sortByCount ✅ Evet
unset ✅ Evet
unwind ✅ Evet

Note

Toplama, $lookup sunucu sürümü 3.6'da kullanıma sunulan bağıntısız alt sorgular özelliğini desteklemez. $lookup işlecinin let ve pipeline alanlarıyla kullanılması, "let desteklenmediğini" belirten bir hata iletisiyle sonuçlanır.

Mantıksal ifadeler

Destekleniyor
and ✅ Evet
not ✅ Evet
or ✅ Evet

Dönüştürme ifadeleri

Destekleniyor
convert ✅ Evet
toBool ✅ Evet
toDate ✅ Evet
toDecimal ✅ Evet
toDouble ✅ Evet
toInt ✅ Evet
toLong ✅ Evet
toObjectId ✅ Evet
toString ✅ Evet

Sabit ifadeler

Destekleniyor
setEquals ✅ Evet
setIntersection ✅ Evet
setUnion ✅ Evet
setDifference ✅ Evet
setIsSubset ✅ Evet
anyElementTrue ✅ Evet
allElementsTrue ✅ Evet

Karşılaştırma ifadeleri

Note

MongoDB API'si, sorguda dizi literali içeren karşılaştırma ifadelerini desteklemez.

Destekleniyor
cmp ✅ Evet
eq ✅ Evet
gt ✅ Evet
gte ✅ Evet
lt ✅ Evet
lte ✅ Evet
ne ✅ Evet
in ✅ Evet
nin ✅ Evet

Aritmetik ifadeler

Destekleniyor
abs ✅ Evet
add ✅ Evet
ceil ✅ Evet
divide ✅ Evet
exp ✅ Evet
floor ✅ Evet
ln ✅ Evet
log ✅ Evet
log10 ✅ Evet
mod ✅ Evet
multiply ✅ Evet
pow ✅ Evet
round ✅ Evet
sqrt ✅ Evet
subtract ✅ Evet
trunc ✅ Evet

Trigonometri ifadeleri

Destekleniyor
acos ✅ Evet
acosh ✅ Evet
asin ✅ Evet
asinh ✅ Evet
atan ✅ Evet
atan2 ✅ Evet
atanh ✅ Evet
cos ✅ Evet
cosh ✅ Evet
degreesToRadians ✅ Evet
radiansToDegrees ✅ Evet
sin ✅ Evet
sinh ✅ Evet
tan ✅ Evet
tanh ✅ Evet

Dize ifadeleri

Destekleniyor
concat ✅ Evet
indexOfBytes ✅ Evet
indexOfCP ✅ Evet
ltrim ✅ Evet
rtrim ✅ Evet
trim ✅ Evet
split ✅ Evet
strLenBytes ✅ Evet
strLenCP ✅ Evet
strcasecmp ✅ Evet
substr ✅ Evet
substrBytes ✅ Evet
substrCP ✅ Evet
toLower ✅ Evet
toUpper ✅ Evet

Metin arama işleci

Destekleniyor
meta ✖️ Hayır

Dizi ifadeleri

Destekleniyor
arrayElemAt ✅ Evet
arrayToObject ✅ Evet
concatArrays ✅ Evet
filter ✅ Evet
indexOfArray ✅ Evet
isArray ✅ Evet
objectToArray ✅ Evet
range ✅ Evet
reverseArray ✅ Evet
reduce ✅ Evet
size ✅ Evet
slice ✅ Evet
zip ✅ Evet
in ✅ Evet

Değişken işleçleri

Destekleniyor
map ✅ Evet
let ✅ Evet

Sistem değişkenleri

Destekleniyor
$$CLUSTERTIME ✅ Evet
$$CURRENT ✅ Evet
$$DESCEND ✅ Evet
$$KEEP ✅ Evet
$$NOW ✅ Evet
$$PRUNE ✅ Evet
$$REMOVE ✅ Evet
$$ROOT ✅ Evet

Literal operatör

Destekleniyor
literal ✅ Evet

Tarih ifadeleri

Destekleniyor
dayOfYear ✅ Evet
dayOfMonth ✅ Evet
dayOfWeek ✅ Evet
year ✅ Evet
month ✅ Evet
week ✅ Evet
hour ✅ Evet
minute ✅ Evet
second ✅ Evet
millisecond ✅ Evet
dateToString ✅ Evet
isoDayOfWeek ✅ Evet
isoWeek ✅ Evet
dateFromParts ✅ Evet
dateToParts ✅ Evet
dateFromString ✅ Evet
isoWeekYear ✅ Evet

Koşullu ifadeler

Destekleniyor
cond ✅ Evet
ifNull ✅ Evet
switch ✅ Evet

Veri türü işleci

Destekleniyor
type ✅ Evet

Biriktirici ifadeleri

Destekleniyor
sum ✅ Evet
avg ✅ Evet
first ✅ Evet
last ✅ Evet
max ✅ Evet
min ✅ Evet
push ✅ Evet
addToSet ✅ Evet
stdDevPop ✅ Evet
stdDevSamp ✅ Evet

Birleştirme işleci

Destekleniyor
mergeObjects ✅ Evet

Veri türleri

MongoDB için Azure Cosmos DB, MongoDB ikili JSON biçiminde kodlanmış belgeleri destekler. 4.0 ve üzeri sürümler (4.0+), performansı artırmak ve maliyetleri azaltmak için bu biçimin iç kullanımını geliştirir. 4.0+ çalıştıran bir uç nokta aracılığıyla yazılan veya güncelleştirilen belgeler bu iyileştirmeden yararlanıyor.

4.0 veya sonraki bir sürüme yükseltme senaryosunda, yükseltmeden önce oluşturulan belgeler gelişmiş performanstan hemen yararlanmaz. İyileştirmelerden yararlanmak için 4.0 uç noktasını kullanarak bir yazma işlemi aracılığıyla bu belgeleri güncelleştirin.

16 MB belge desteği, belgeler için boyut sınırını 2 MB'tan 16 MB'a yükseltir. Bu sınır yalnızca özelliği etkinleştirdikten sonra oluşturulan koleksiyonlar için geçerlidir. Bu özelliği bir veritabanı hesabı için etkinleştirdikten sonra devre dışı bırakılamaz.

16 MB belge desteğini etkinleştirmek için Azure portalındaki kaynağın Özellikler sekmesindeki ayarı değiştirin veya özelliğiEnableMongo16MBDocumentSupportekleyin.

Sunucu Tarafı Yeniden Deneme'yi etkinleştirmenizi ve daha büyük belgelerdeki isteklerin başarılı olduğundan emin olmak için joker karakter dizinlerini kullanmaktan kaçınmanızı öneririz. Veritabanınızı veya koleksiyon isteği birimlerinizi yükseltmek de performansa yardımcı olabilir.

Destekleniyor
Double ✅ Evet
String ✅ Evet
Object ✅ Evet
Array ✅ Evet
Binary Data ✅ Evet
ObjectId ✅ Evet
Boolean ✅ Evet
Date ✅ Evet
Null ✅ Evet
32-bit Integer (int) ✅ Evet
Timestamp ✅ Evet
64-bit Integer (long) ✅ Evet
MinKey ✅ Evet
MaxKey ✅ Evet
Decimal128 ✅ Evet
Regular Expression ✅ Evet
JavaScript ✅ Evet
JavaScript (with scope) ✅ Evet
Undefined ✅ Evet

Dizinler ve dizin özellikleri

MongoDB için Azure Cosmos DB aşağıdaki dizin komutlarını ve dizin özelliklerini destekler.

Indexes

Destekleniyor
Single Field Index ✅ Evet
Compound Index ✅ Evet
Multikey Index ✅ Evet
Text Index ✖️ Hayır
2dsphere ✅ Evet
2d Index ✖️ Hayır
Hashed Index ✖️ Hayır

Dizin özellikleri

Destekleniyor
TTL ✅ Evet
Unique ✅ Evet
Partial ❓Kısmi
Case Insensitive ✖️ Hayır
Sparse ✖️ Hayır
Background ✅ Evet

Tip

Partial yalnızca benzersiz dizinler için desteklenir.

Operators

MongoDB için Azure Cosmos DB aşağıdaki işleçleri destekler.

Mantıksal işleçler

Destekleniyor
or ✅ Evet
and ✅ Evet
not ✅ Evet
nor ✅ Evet

Öğe işleçleri

Destekleniyor
exists ✅ Evet
type ✅ Evet

Değerlendirme sorgusu işleçleri

Destekleniyor
expr ✅ Evet
jsonSchema ✖️ Hayır
mod ✅ Evet
regex ✅ Evet
text ✖️ Hayır
where ✖️ Hayır

Sorgularda $regex , sol bağlantılı ifadeler dizin aramasına izin verir. Ancak i (büyük/küçük harf duyarsızlığı) ve m (çok satırlı) değiştiricilerini kullanmak, koleksiyonun tüm ifadelerde tarama yapmasına neden olur.

$ veya | eklenmesi gerektiğinde, en iyisi iki (veya daha fazla) $regex sorgu oluşturmaktır.

Örneğin, aşağıdaki özgün sorguyu değiştirin:

find({x:{$regex: /^abc$/})

Bu sorguya:

find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})

Değiştirilen sorgunun ilk bölümü, ile başlayan ^abcbelgelerle aramayı kısıtlamak için dizinini kullanır. Sorgunun ikinci bölümü tam girdilerle eşleşir. Çubuk operatörü (|), bir işlev gibi or olarak çalışır. Sorgu find({x:{$regex: /^abc |^def/}), alan x değerleri abc veya def ile başlayan belgelerle eşleşir. Dizini kullanmak için sorguyu iki ayrı sorguya bölün ve $or işleciyle birleştirin: find({$or: [{x: {$regex: /^abc/}}, {x: {$regex: /^def/}}]}).

Tip

Komut text desteklenmez. Bunun yerine $regex kullanın.

Dizi işleçleri

Destekleniyor
all ✅ Evet
elemMatch ✅ Evet
size ✅ Evet

Yorum operatörü

Destekleniyor
comment ✅ Evet

Projeksiyon operatörleri

Destekleniyor
elemMatch ✅ Evet
meta ✖️ Hayır
slice ✅ Evet

Güncelleştirme işleçleri

Alan güncelleştirme işleçleri

Destekleniyor
inc ✅ Evet
mul ✅ Evet
rename ✅ Evet
setOnInsert ✅ Evet
set ✅ Evet
unset ✅ Evet
min ✅ Evet
max ✅ Evet
currentDate ✅ Evet

Dizi güncelleştirme işleçleri

Destekleniyor
$ ✅ Evet
$[] ✅ Evet
$[\<identifier\>] ✅ Evet
addToSet ✅ Evet
pop ✅ Evet
pullAll ✅ Evet
pull ✅ Evet
push ✅ Evet
pushAll ✅ Evet

Değiştiricileri güncelleştirme

Destekleniyor
each ✅ Evet
slice ✅ Evet
sort ✅ Evet
position ✅ Evet

Bit düzeyinde güncelleştirme işleci

Destekleniyor
bit ✅ Evet
bitsAllSet ✖️ Hayır
bitsAnySet ✖️ Hayır
bitsAllClear ✖️ Hayır
bitsAnyClear ✖️ Hayır

Jeo-uzamsal işleçler

Destekleniyor
$geoWithin ✅ Evet
$geoIntersects ✅ Evet
$near ✅ Evet
$nearSphere ✅ Evet
$geometry ✅ Evet
$minDistance ✅ Evet
$maxDistance ✅ Evet
$center ✖️ Hayır
$centerSphere ✖️ Hayır
$box ✖️ Hayır
$polygon ✖️ Hayır

Sıralama işlemleri

İşlemi kullandığınızda findOneAndUpdate , tek bir alandaki sıralama işlemleri desteklenir. Birden çok alandaki sıralama işlemleri desteklenmez.

Dizinleme

MongoDB API'si birden çok alanda sıralamayı etkinleştirmek, sorgu performansını geliştirmek ve benzersizliği zorlamak için çeşitli dizinleri destekler.

İstemci tarafı alan düzeyinde şifreleme

İstemci düzeyinde alan şifrelemesi bir sürücü özelliğidir ve MongoDB için Azure Cosmos DB ile çalışır. Yazma işlemleri sırasında sürücünün her alanı şifrelediği açık şifreleme desteklenir. Otomatik şifreleme desteklenmez. Açık şifre çözme ve otomatik şifre çözme desteklenir.

mongocryptd, desteklenen işlemlerden herhangi birini gerçekleştirmek için gerekli olmadığından çalıştırılmamalıdır.

GridFS

Azure Cosmos DB, GridFS uyumlu herhangi bir Mongo sürücüsü aracılığıyla GridFS'i destekler.

Replication

Azure Cosmos DB, en düşük katmanlarda otomatik, yerel çoğaltmayı destekler. Bu mantık ayrıca düşük gecikme süresine ve genel çoğaltmaya ulaşmak için genişletilir. Azure Cosmos DB el ile çoğaltma komutlarını desteklemez.

Yeniden denenebilir yazma işlemleri

Yeniden denenebilir yazma özelliği MongoDB sürücülerinin belirli yazma işlemlerini otomatik olarak yeniden denemesini sağlar. Bu özellik, MongoDB protokol gereksinimleriyle eşleşen belirli işlemler için daha sıkı gereksinimlere neden olur. Bu özellik etkinleştirildiğinde, parçalı koleksiyonlardaki silme işlemleri de dahil olmak üzere güncelleştirme işlemleri, parça anahtarının sorgu filtresine veya update deyimine eklenmesini gerektirir.

Örneğin, bir koleksiyon, anahtar region üzerinde parçalanmışsa: alanı city = "NYC" olan tüm belgeleri silmek için, yeniden denemeye uygun yazmalar etkinleştirildiyse, uygulamanın tüm parça anahtarı (bölge) değerleri için işlemi yürütmesi gerekir.

  • db.coll.deleteMany({"region": "USA", "city": "NYC"}) - Mesajla başarı sağlandı Success
  • db.coll.deleteMany({"city": "NYC"}) - Hatayla başarısız oluyor ShardKeyNotFound(61)

Note

Yeniden denenebilir yazma işlemleri özelliği şu anda toplu, sırasız yazma işlemlerini desteklemez. Yeniden denenebilir yazmalar etkinken toplu yazma işlemleri gerçekleştirmek istiyorsanız, toplu sıralı yazma işlemleri gerçekleştirin.

Özelliği etkinleştirmek için veritabanı hesabınıza EnableMongoRetryableWrites özelliğini ekleyin. Bu özellik, Azure portalındaki Özellikler sekmesinde de etkinleştirilebilir.

Sharding

Azure Cosmos DB, otomatik, sunucu tarafı parçalamasını destekler. Parça oluşturma, yerleştirme ve dengelemeyi otomatik olarak yönetir. Azure Cosmos DB el ile parçalama komutlarını desteklemez. Başka bir deyişle , addShardve balancerStartgibi moveChunkkomutları çağırmanız gerekmez. Parça anahtarını yalnızca kapsayıcıları oluştururken veya verileri sorgularken belirtmeniz gerekir.

Sessions

Azure Cosmos DB henüz sunucu tarafı oturum komutlarını desteklemez.

Yaşam Süresi

Azure Cosmos DB, belgenin zaman damgasını temel alan bir Yaşam Süresi (TTL) özelliği sağlar. Azure portalında bir koleksiyon için TTL'yi etkinleştirin.

Özel TTL

Bu özellik, koleksiyon içindeki tek bir alanda özel bir TTL değeri belirtmenize olanak tanır. Belgelerin geçerliliği bu alanın değerine göre sona erer.

Bir alanda TTL'nin etkinleştirildiği bir koleksiyonda:

  • Kabul edilebilir türler, ikili JSON (BSON) veri türü ile Unix milisaniyelik zaman damgası olarak yorumlanıp süre sonunu belirleyen sayısal türlerdir (tamsayı, uzun tamsayı veya ondalık sayı).

  • TTL alanı bir diziyse, kabul edilebilir türde olan dizinin en küçük öğesi belgenin süre sonu için dikkate alınır.

  • Bir belgede TTL alanı eksikse, belgenin süresi dolmaz.

  • TTL alanı kabul edilebilir bir tür değilse, belgenin süresi dolmaz.

Özel TTL sınırlamaları

  • Koleksiyondaki yalnızca bir alanın üzerinde TTL ayarlı olabilir.

  • Özel bir TTL alan kümesi ile, \_ts alanı belgenin süre sonu için kullanılamaz.

  • Ek olarak \_ts alanını kullanamazsınız.

Konfigürasyon

Hesap için EnableTtlOnCustomPath özelliğini güncelleyerek özel bir TTL'yi etkin kılabilirsiniz.

TTL'yi ayarlama

TTL'yi ayarlamak için şu komutu çalıştırın: db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})

Transactions

Çok belgeli işlemler parçalanmamış bir koleksiyonda desteklenir. Çok belgeli işlemler koleksiyonlar arasında veya parçalı koleksiyonlarda desteklenmez. İşlemler için zaman aşımı sabit 5 saniyedir.

Kullanıcıları ve rolleri yönetin

Azure Cosmos DB henüz kullanıcıları ve rolleri desteklemez. Ancak Azure Cosmos DB, Azure rol tabanlı erişim denetimini ve Azure portalından ( Bağlantı Dizeleri sayfasında) elde edilebilen okuma-yazma ve salt okunur parolaları ve anahtarları destekler.

Yazma kaygıları

Bazı uygulamalar, yazma işlemi sırasında gereken yanıt sayısını belirten bir yazma sorununa dayanır. Azure Cosmos DB'nin çoğaltmayı arka planda nasıl yönettiğinden dolayı, tüm yazma işlemleri varsayılan olarak otomatik olarak Çoğunluk'tur. Azure Cosmos DB, istemci kodu tarafından belirtilen yazma sorunlarını yoksayar. Kullanılabilirlik ve performansı en üst düzeye çıkarmak için tutarlılık düzeylerini kullanmayı öğrenin.