MongoDB için Azure Cosmos DB (3.2 sürümü): desteklenen özellikler ve söz dizimi

ŞUNLAR IÇIN GEÇERLIDIR: MongoDB

Azure Cosmos DB, Microsoft'un genel olarak dağıtılmış çok modelli veritabanı hizmetidir. Açık kaynak MongoDB istemci sürücülerinden herhangi birini kullanarak MongoDB için Azure Cosmos DB ile iletişim kurabilirsiniz. MongoDB için Azure Cosmos DB, MongoDB kablo protokolüne bağlı kalarak mevcut istemci sürücülerinin kullanılmasını sağlar.

MongoDB için Azure Cosmos DB'yi kullanarak, Azure Cosmos DB'nin sağladığı tüm kurumsal özelliklerle alışkın olduğunuz MongoDB'nin avantajlarından yararlanabilirsiniz: genel dağıtım, otomatik parçalama, kullanılabilirlik ve gecikme garantisi, her alanın otomatik dizinlenmesi, bekleyen şifreleme, yedeklemeler ve çok daha fazlası.

Not

MongoDB için Azure Cosmos DB'nin 3.2 sürümünde kullanım süresi sonu (EOL) için geçerli bir plan yoktur. Gelecekteki bir EOL için minimum bildirim üç yıldır.

Protokol Desteği

MongoDB için Azure Cosmos DB'ye yönelik 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 aşağıda 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. Şu anda desteklenen işlemlerin, işleçlerin, aşamaların, komutların ve seçeneklerin ayrıntılı listesini aşağıda bulabilirsiniz.

Veritabanı komutları

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

Not

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

Sorgulama ve yazma işlemi komutları

  • delete
  • find
  • findAndModify
  • getLastError
  • getMore
  • insert
  • update

Kimlik doğrulama komutları

  • logout
  • authenticate
  • getnonce

Yönetim komutları

  • dropDatabase
  • listCollections
  • drop
  • create
  • filemd5
  • createIndexes
  • listIndexes
  • dropIndexes
  • connectionStatus
  • reIndex

Tanılama komutları

  • buildInfo
  • collStats
  • dbStats
  • hostInfo
  • listDatabases
  • whatsmyuri

Toplama ardışık düzeni

Toplama komutları

  • aggregate
  • count
  • distinct

Toplama aşamaları

  • $project
  • $match
  • $limit
  • $skip
  • $unwind
  • $group
  • $sample
  • $sort
  • $lookup
  • $out
  • $count
  • $addFields

Toplama ifadeleri

Mantıksal ifadeler

  • $and
  • $or
  • $not

Küme ifadeleri

  • $setEquals
  • $setIntersection
  • $setUnion
  • $setDifference
  • $setIsSubset
  • $anyElementTrue
  • $allElementsTrue

Karşılaştırma ifadeleri

  • $cmp
  • $eq
  • $gt
  • $gte
  • $lt
  • $lte
  • $ne

Aritmetik ifadeler

  • $abs
  • $add
  • $ceil
  • $divide
  • $exp
  • $floor
  • $ln
  • $log
  • $log10
  • $mod
  • $multiply
  • $pow
  • $sqrt
  • $subtract
  • $trunc

Dize ifadeleri

  • $concat
  • $indexOfBytes
  • $indexOfCP
  • $split
  • $strLenBytes
  • $strLenCP
  • $strcasecmp
  • $substr
  • $substrBytes
  • $substrCP
  • $toLower
  • $toUpper

Dizi ifadeleri

  • $arrayElemAt
  • $concatArrays
  • $filter
  • $indexOfArray
  • $isArray
  • $range
  • $reverseArray
  • $size
  • $slice
  • $in

Tarih ifadeleri

  • $dayOfYear
  • $dayOfMonth
  • $dayOfWeek
  • $year
  • $month
  • $week
  • $hour
  • $minute
  • $second
  • $millisecond
  • $isoDayOfWeek
  • $isoWeek

Koşullu ifadeler

  • $cond
  • $ifNull

Toplama biriktiricileri

  • $sum
  • $avg
  • $first
  • $last
  • $max
  • $min
  • $push
  • $addToSet

İşleçler

Desteklenen işleçler, bunların kullanımıyla ilgili örneklerle birlikte aşağıda verilmiştir. 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"
}
İşleç Örnek
eq { "Volcano Name": { $eq: "Rainier" } }
gt { "Elevation": { $gt: 4000 } }
gte { "Elevation": { $gte: 4392 } }
lt { "Elevation": { $lt: 5000 } }
lte { "Elevation": { $lte: 5000 } }
ne { "Elevation": { $ne: 1 } }
in { "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } }
nin { "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } }
or { $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] }
and { $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] }
not { "Elevation": { $not: { $gt: 5000 } } }
nor { $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] }
exists { "Status": { $exists: true } }
type { "Status": { $type: "string" } }
mod { "Elevation": { $mod: [ 4, 0 ] } }
regex { "Volcano Name": { $regex: "^Rain"} }

Notlar

Normal ifade ($regex) sorgularında, soldan başlayan 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 '|' eklemeniz gerektiğinde, en iyisi iki (veya daha fazla) regex sorgusu oluşturmaktır. Örneğin şu özgün sorgu: find({x:{$regex: /^abc$/}) şu şekilde değiştirilmelidir: find({x:{$regex: /^abc/, x:{$regex:/^abc$/}}). İlk kısım aramayı ^abc ile başlayan belgeler ile sınırlamak için dizini kullanır, ikinci kısım ise tam girişler ile eşleşir. Çubuk işleci '|' "veya" işlevini görür - find({x:{$regex: /^abc|^def/}) sorgusu 'x' alanının değerlerinin "abc" ile veya "def" ile başladığı belgelerle eşleşir. Dizinden yararlanmak için sorgunun $or işleci ile birleştirilen iki farklı sorguya bölünmesi gerekir: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Güncelleştirme işleçleri

Alan güncelleştirme işleçleri

  • $inc
  • $mul
  • $rename
  • $setOnInsert
  • $set
  • $unset
  • $min
  • $max
  • $currentDate

Dizi güncelleştirme işleçleri

  • $addToSet
  • $pop
  • $pullAll
  • $pull (Not: Koşul içeren $pull desteklenmez)
  • $pushAll
  • $push
  • $each
  • $slice
  • $sort
  • $position

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

  • $bit

Jeo-uzamsal işleçler

İşleç Örnek Desteklenir
$geoWithin { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Yes
$geoIntersects { "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 ] ] ] } } } } Yes
$near { "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 ] ] ] } } } } Yes
$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Yes
$geometry { "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 ] ] ] } } } } Yes
$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } Yes
$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Yes
$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } Yes
$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Yes
$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } Yes
$polygon { "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 ] ] ] } } } } Yes

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

İşleç Örnek Notlar
$all { "Location.coordinates": { $all: [-121.758, 46.87] } }
$elemMatch { "Location.coordinates": { $elemMatch: { $lt: 0 } } }
$size { "Location.coordinates": { $size: 2 } }
$comment { "Location.coordinates": { $elemMatch: { $lt: 0 } }, $comment: "Negative values"}
$text Desteklenmez. Bunun yerine $regex kullanın.

Desteklenmeyen işleçler

$where ve $eval işleçleri Azure Cosmos DB tarafından desteklenmez.

Yöntemler

Aşağıdaki yöntemler desteklenir:

İmleç yöntemleri

Yöntem Örnek Notlar
cursor.sort() 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, varsayılan _id anahtarda benzersizliğin korunmasına benzer şekilde, belirli bir alanın koleksiyondaki tüm belgeler arasında yinelenen değerlere sahip olmamasını sağlar. Azure Cosmos DB'de 'benzersiz' kısıtlaması dahil olmak üzere createIndex komutunu kullanarak ö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'deki koleksiyon düzeyinde (_ts) yaşam süresini (TTL) destekler. 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 (Azure RBAC) ve Azure portal (Bağlantı Dizesi sayfası) aracılığıyla elde edilebilen okuma-yazma ve salt okunur parolaları/anahtarları destekler.

Çoğaltma

Azure Cosmos DB, en düşük katmanlarda otomatik, yerel çoğaltmayı destekler. Bu mantık, düşük gecikme süresi ve küresel çoğaltma elde etmek için genişletilir. 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 Bir Yazma Sorunu kullanır. Azure Cosmos DB'nin çoğaltmayı arka planda işleme şekli nedeniyle tüm yazma işlemleri varsayılan olarak otomatik olarak Çekirdek'tir. İstemci kodu tarafından belirtilen yazma endişeleri yoksayılır. Daha fazla bilgi için bkz. Kullanılabilirlik ve performansı en üst düzeye çıkarmak için tutarlılık düzeylerini kullanma.

Parçalama

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 shardCollection, addShard, balancerStart, moveChunk gibi komutları çağırmanız gerekmez. Yalnızca kapsayıcıları oluştururken veya verileri sorgularken parça anahtarını belirtmeniz gerekir.

Sonraki adımlar