MongoDB 3.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 3.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 3.2 için Azure Cosmos DB kullanmanın desteklenen özellikleri, söz dizimi ve avantajları açıklanmaktadır.

Important

MongoDB için Azure Cosmos DB'nin 3.2 sürümünde destek sonu için geçerli bir plan yoktur. Gelecekteki destek sonlandırma bildirimi için asgari bildirim süresi üç yıldır.

Protokol Desteği

MongoDB için Azure Cosmos DB'nin tüm yeni hesapları MongoDB sunucu sürümü 3.6 ile uyumludur. Bu makalede MongoDB sürüm 3.2 ele alınır. Desteklenen işleçler ve tüm sınırlamalar veya özel durumlar burada listelenmiştir. Bu protokolleri anlayan tüm istemci sürücülerinin MongoDB için Azure Cosmos DB'ye bağlanabilmesi gerekir.

MongoDB için Azure Cosmos DB, uygun hesaplar için sorunsuz bir yükseltme deneyimi de sunar. MongoDB sürüm yükseltme kılavuzu hakkında daha fazla bilgi edinin.

Sorgu dili desteği

MongoDB için Azure Cosmos DB, MongoDB sorgu dili yapıları için kapsamlı destek sağlar. Burada ş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:

Note

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

Sorgulama ve yazma işlemi komutları

Destekleniyor
delete ✅ Evet
find ✅ Evet
findAndModify ✅ Evet
getLastError ✅ Evet
getMore ✅ Evet
insert ✅ Evet
update ✅ Evet

Kimlik doğrulama komutları

Destekleniyor
logout ✅ Evet
authenticate ✅ Evet
getnonce ✅ Evet

Yönetim komutları

Destekleniyor
dropDatabase ✅ Evet
listCollections ✅ Evet
drop ✅ Evet
create ✅ Evet
filemd5 ✅ Evet
createIndexes ✅ Evet
listIndexes ✅ Evet
dropIndexes ✅ Evet
connectionStatus ✅ Evet
reIndex ✅ Evet

Tanılama komutları

Destekleniyor
buildInfo ✅ Evet
collStats ✅ Evet
dbStats ✅ Evet
hostInfo ✅ Evet
listDatabases ✅ Evet
whatsmyuri ✅ Evet

Toplama ardışık düzeni

Toplama komutları

Destekleniyor
aggregate ✅ Evet
count ✅ Evet
distinct ✅ Evet

Toplama aşamaları

Destekleniyor
$project ✅ Evet
$match ✅ Evet
$limit ✅ Evet
$skip ✅ Evet
$unwind ✅ Evet
$group ✅ Evet
$sample ✅ Evet
$sort ✅ Evet
$lookup ✅ Evet
$out ✅ Evet
$count ✅ Evet
$addFields ✅ Evet

Toplama ifadeleri

Mantıksal ifadeler

Destekleniyor
$and ✅ Evet
$or ✅ Evet
$not ✅ Evet

Sabit ifadeler

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

Karşılaştırma ifadeleri

Destekleniyor
$cmp ✅ Evet
$eq ✅ Evet
$gt ✅ Evet
$gte ✅ Evet
$lt ✅ Evet
$lte ✅ Evet
$ne ✅ 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
$sqrt ✅ Evet
$subtract ✅ Evet
$trunc ✅ Evet

Dize ifadeleri

Destekleniyor
$concat ✅ Evet
$indexOfBytes ✅ Evet
$indexOfCP ✅ Evet
$split ✅ Evet
$strLenBytes ✅ Evet
$strLenCP ✅ Evet
$strcasecmp ✅ Evet
$substr ✅ Evet
$substrBytes ✅ Evet
$substrCP ✅ Evet
$toLower ✅ Evet
$toUpper ✅ Evet

Dizi ifadeleri

Destekleniyor
$arrayElemAt ✅ Evet
$concatArrays ✅ Evet
$filter ✅ Evet
$indexOfArray ✅ Evet
$isArray ✅ Evet
$range ✅ Evet
$reverseArray ✅ Evet
$size ✅ Evet
$slice ✅ Evet
$in ✅ Evet

Tarih ifadeleri

Destekleniyor
$dayOfYear ✅ Evet
$dayOfMonth ✅ Evet
$dayOfWeek ✅ Evet
$year ✅ Evet
$month ✅ Evet
$week ✅ Evet
$hour ✅ Evet
$minute ✅ Evet
$second ✅ Evet
$millisecond ✅ Evet
$isoDayOfWeek ✅ Evet
$isoWeek ✅ Evet

Koşullu ifadeler

Destekleniyor
$cond ✅ Evet
$ifNull ✅ Evet

Toplama biriktiricileri

Destekleniyor
$sum ✅ Evet
$avg ✅ Evet
$first ✅ Evet
$last ✅ Evet
$max ✅ Evet
$min ✅ Evet
$push ✅ Evet
$addToSet ✅ Evet

Operators

Desteklenen işleçler, bunların kullanımıyla ilgili örneklerle birlikte aşağıda verilmiştir. Buradaki sorgularda kullanılan bu örnek belgeyi göz önünde bulundurun:

{
  "Volcano Name": "Rainier",
  "Country": "United States",
  "Region": "US-Washington",
  "Location": {
    "type": "Point",
    "coordinates": [
      -121.758,
      46.87
    ]
  },
  "Elevation": 4392,
  "Type": "Stratovolcano",
  "Status": "Dendrochronology",
  "Last Known Eruption": "Last known eruption from 1800-1899, inclusive"
}
Destekleniyor Example
eq ✅ Evet { "Volcano Name": { $eq: "Rainier" } }
gt ✅ Evet { "Elevation": { $gt: 4000 } }
gte ✅ Evet { "Elevation": { $gte: 4392 } }
lt ✅ Evet { "Elevation": { $lt: 5000 } }
lte ✅ Evet { "Elevation": { $lte: 5000 } }
ne ✅ Evet { "Elevation": { $ne: 1 } }
in ✅ Evet { "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } }
nin ✅ Evet { "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } }
or ✅ Evet { $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] }
and ✅ Evet { $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] }
not ✅ Evet { "Elevation": { $not: { $gt: 5000 } } }
nor ✅ Evet { $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] }
exists ✅ Evet { "Status": { $exists: true } }
type ✅ Evet { "Status": { $type: "string" } }
mod ✅ Evet { "Elevation": { $mod: [ 4, 0 ] } }
regex ✅ Evet { "Volcano Name": { $regex: "^Rain"} }

Notlar

$regex sorgularında, sol bağlantılı ifadeler dizin aramasına izin verir. Ancak 'i' değiştiricisini (büyük/küçük harf duyarlığı) ve 'm' değiştiricisini (çok satırlılık) kullanmak, tüm ifadelerde koleksiyon taramasına neden olur.

$ veya | eklenmesi gerektiğinde, iki (veya daha fazla) regex sorgusu oluşturmak en iyisidir. Örneğin, aşağıdaki özgün sorgu göz önünde bulundurulduğunda: find({x:{$regex: /^abc$/})aşağıdaki gibi değiştirilmesi gerekir:

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

İlk bölüm, aramayı ^abc ile başlayan belgelerle kısıtlamak için dizini kullanır ve ikinci bölüm tam girişlerle eşleşir. Çubuk işleci | bir "veya" işlevi görür - sorgu find({x:{$regex: /^abc |^def/}), alan x'nin değerlerinin "abc" veya "def" ile başladığı belgelerle eşleşir. Dizini kullanmak için sorguyu $or işleci tarafından birleştirilen iki farklı sorguya bölün: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

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
$addToSet ✅ Evet
$pop ✅ Evet
$pullAll ✅ Evet
$pull ✅ Evet
$pushAll ✅ Evet
$push ✅ Evet
$each ✅ Evet
$slice ✅ Evet
$sort ✅ Evet
$position ✅ Evet

Tip

$pull koşul ile desteklenmez.

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

Destekleniyor
$bit ✅ Evet

Jeo-uzamsal işleçler

Destekleniyor Example
$geoWithin ✅ Evet { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } }
$geoIntersects ✅ Evet { "Location.coordinates": { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } }
$near ✅ Evet { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } }
$nearSphere ✅ Evet { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } }
$geometry ✅ Evet { "Location.coordinates": { $geoWithin: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } }
$minDistance ✅ Evet { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } }
$maxDistance ✅ Evet { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } }
$center ✅ Evet { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } }
$centerSphere ✅ Evet { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } }
$box ✅ Evet { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } }
$polygon ✅ Evet { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } }

Sıralama İşlemleri

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

Diğer işleçler

Destekleniyor Example Notlar
$all ✅ Evet { "Location.coordinates": { $all: [-121.758, 46.87] } }
$elemMatch ✅ Evet { "Location.coordinates": { $elemMatch: { $lt: 0 } } }
$size ✅ Evet { "Location.coordinates": { $size: 2 } }
$comment ✅ Evet { "Location.coordinates": { $elemMatch: { $lt: 0 } }, $comment: "Negative values"}
$text ✅ Evet Desteklenmiyor. Bunun yerine $regex kullanın.

Desteklenmeyen işleçler

MongoDB için Azure Cosmos DB, $where ve $eval işleçlerini desteklemez.

Methods

Aşağıdaki yöntemler desteklenir:

İmleç yöntemleri

Destekleniyor Example Notlar
cursor.sort() ✅ Evet cursor.sort({ "Elevation": -1 }) Sıralama anahtarı olmayan belgeler döndürülmüyor

Benzersiz dizinler

Azure Cosmos DB, varsayılan olarak veritabanına yazılan belgelerdeki her alanın dizinini oluşturur. Benzersiz dizinler, belirli bir alanın, varsayılan _id anahtarda benzersizliğin korunma yöntemine benzer şekilde koleksiyondaki tüm belgeler arasında yinelenen değerlere sahip olmamasını sağlar. 'benzersiz' kısıtlaması dahil olmak üzere createIndex komutunu kullanarak Azure Cosmos DB'de özel dizinler oluşturabilirsiniz.

MongoDB için Azure Cosmos DB kullanan tüm Azure Cosmos DB hesaplarında benzersiz dizinler kullanılabilir.

Etkin kalma süresi (TTL)

Azure Cosmos DB yalnızca sürüm 3.2'de koleksiyon düzeyinde (_ts) bir yaşam süresi (TTL) desteği sunar. Diğer TTL biçimlerinden yararlanmak için 3.6+ sürümlerine yükseltin.

Kullanıcı ve rol yönetimi

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

Replication

Azure Cosmos DB, en düşük katmanlarda otomatik, yerel çoğaltmayı destekler. Bu mantık, düşük gecikme süreli ve küresel çoğaltma sağlamak için genişletilmiştir. Azure Cosmos DB el ile çoğaltma komutlarını desteklemez.

Yazma Sorunu

Bazı uygulamalar, yazma işlemi sırasında gereken yanıt sayısını belirten Yazma Sorunu'na dayanır. Azure Cosmos DB'nin çoğaltmayı arka planda nasıl işlediği nedeniyle tüm yazma işlemleri varsayılan olarak otomatik olarak Quorum'dur. İstemci kodu tarafından belirtilen yazma kaygısı görmezden gelinir. Daha fazla bilgi için bkz. Kullanılabilirlik ve performansı en üst düzeye çıkarmak için tutarlılık düzeylerini kullanma.

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. Yalnızca kapsayıcıları oluştururken veya verileri sorgularken parça anahtarını belirtmeniz gerekir.