Azure Cosmos DB for MongoDB (wersja 3.2): obsługiwane funkcje i składnia

DOTYCZY: Mongodb

Azure Cosmos DB to rozproszona globalnie, wielomodelowa usługa bazy danych firmy Microsoft. Możesz komunikować się z usługą Azure Cosmos DB for MongoDB przy użyciu dowolnego sterownika klienta bazy danych MongoDB typu open source. Usługa Azure Cosmos DB dla bazy danych MongoDB umożliwia korzystanie z istniejących sterowników klienta przez przestrzeganie protokołu przewodowego bazy danych MongoDB.

Korzystając z usługi Azure Cosmos DB dla bazy danych MongoDB, możesz korzystać z zalet używanej bazy danych MongoDB, z wszystkimi możliwościami przedsiębiorstwa oferowanymi przez usługę Azure Cosmos DB: dystrybucją globalną, automatycznym fragmentowaniem, gwarancją dostępności i opóźnieniami, automatycznym indeksowaniem każdego pola, szyfrowaniem magazynowanym, kopiami zapasowymi i wiele innych.

Uwaga

Wersja 3.2 usługi Azure Cosmos DB dla bazy danych MongoDB nie ma bieżących planów zakończenia życia (EOL). Minimalne powiadomienie dla przyszłego EOL wynosi trzy lata.

Obsługa protokołu

Wszystkie nowe konta usługi Azure Cosmos DB dla bazy danych MongoDB są zgodne z serwerem MongoDB w wersji 3.6. W tym artykule opisano bazę danych MongoDB w wersji 3.2. Poniżej wymieniono obsługiwane operacje wraz z ewentualnymi ograniczeniami lub wyjątkami. Każdy sterownik klienta, który rozumie te protokoły, powinien mieć możliwość nawiązania połączenia z usługą Azure Cosmos DB dla bazy danych MongoDB.

Usługa Azure Cosmos DB dla bazy danych MongoDB oferuje również bezproblemowe środowisko uaktualniania dla kwalifikujących się kont. Dowiedz się więcej na temat przewodnika uaktualniania wersji bazy danych MongoDB.

Obsługa języka zapytań

Usługa Azure Cosmos DB dla bazy danych MongoDB zapewnia kompleksową obsługę konstrukcji języka zapytań bazy danych MongoDB. Poniżej znajduje się szczegółowa lista aktualnie obsługiwanych operacji, operatorów, etapów, poleceń i opcji.

Polecenia bazy danych

Usługa Azure Cosmos DB dla bazy danych MongoDB obsługuje następujące polecenia bazy danych:

Uwaga

W tym artykule wymieniono tylko obsługiwane polecenia serwera i wyklucza funkcje otoki po stronie klienta. Funkcje otoki po stronie klienta, takie jak deleteMany() i updateMany() wewnętrznie korzystają z delete() poleceń i update() serwera. Funkcje korzystające z obsługiwanych poleceń serwera są zgodne z usługą Azure Cosmos DB dla bazy danych MongoDB.

Polecenia operacji zapytań i zapisu

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

Polecenia uwierzytelniania

  • logout
  • authenticate
  • getnonce

Polecenia administracyjne

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

Polecenia diagnostyki

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

Potok agregacji

Polecenia agregacji

  • aggregate
  • count
  • distinct

Etapy agregacji

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

Wyrażenia agregacji

Wyrażenia logiczne

  • $and
  • $or
  • $not

Stałe wyrażenia

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

Wyrażenia porównania

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

Wyrażenia arytmetyczne

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

Wyrażenia ciągu

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

Wyrażenia tablicy

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

Wyrażenia daty

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

Wyrażenia warunkowe

  • $cond
  • $ifNull

Akumulatory agregacji

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

Operatory

Poniżej znajdują się obsługiwane operatory razem z odpowiednimi przykładami ich użycia. Warto zapoznać się z przykładowym dokumentem użytym w zapytaniach poniżej:

{
  "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"
}
Operator Przykład
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"} }

Uwagi

W zapytaniach $regex wyrażenia zakotwiczone z lewej strony umożliwiają wyszukiwanie indeksu. Jednak użycie modyfikatora „i” (wielkość liter nie ma znaczenia) oraz modyfikatora „m” (wiele wierszy) powoduje skanowanie kolekcji we wszystkich wyrażeniach. Jeśli istnieje potrzeba uwzględnienia ciągu "$" lub "|", najlepiej utworzyć dwa (lub więcej) zapytań wyrażeń regularnych. Jeśli na przykład oryginalne zapytanie jest następujące: find({x:{$regex: /^abc$/}) należy je zmodyfikować w następujący sposób: find({x:{$regex: /^abc/, x:{$regex:/^abc$/}}). Pierwsza część użyje indeksu, aby ograniczyć wyszukiwanie do dokumentów, które rozpoczynają się od ^abc, a druga część będzie dokładnie dopasowywana do wpisów. Operator kreski „|” działa jako funkcja „or” — zapytanie find({x:{$regex: /^abc|^def/}) pasuje do dokumentów, w których pole „x” ma wartości zaczynające się od „abc” lub „def”. Aby korzystać z indeksu, zaleca się podzielenie zapytania na dwa różne zapytania połączone operatorem $or: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Operatory aktualizacji

Operatory do aktualizacji pól

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

Operatory do aktualizacji tablic

  • $addToSet
  • $pop
  • $pullAll
  • $pull (Uwaga: $pull z warunkiem nie jest obsługiwany)
  • $pushAll
  • $push
  • $each
  • $slice
  • $sort
  • $position

Operator do aktualizacji Bitwise

  • $bit

Operatory danych geoprzestrzennych

Operator Przykład Obsługiwane
$geoWithin { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Tak
$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 ] ] ] } } } } Tak
$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 ] ] ] } } } } Tak
$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Tak
$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 ] ] ] } } } } Tak
$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } Tak
$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Tak
$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } Tak
$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Tak
$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } Tak
$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 ] ] ] } } } } Tak

Operacje sortowania

W przypadku korzystania z findOneAndUpdate operacji operacje sortowania na jednym polu są obsługiwane, ale operacje sortowania w wielu polach nie są obsługiwane.

Inne operatory

Operator Przykład Uwagi
$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 Nieobsługiwane. Zamiast tego użyj operatora $regex.

Nieobsługiwane operatory

Operatory $where i $eval nie są obsługiwane przez usługę Azure Cosmos DB.

Metody

Obsługiwane są następujące metody:

Metody kursora

Metoda Przykład Uwagi
cursor.sort() cursor.sort({ "Elevation": -1 }) Dokumenty bez klucza sortowania nie są zwracane

Indeksy unikatowe

Usługa Azure Cosmos DB indeksuje każde pole w dokumentach, które są domyślnie zapisywane w bazie danych. Indeksy unikatowe zapewniają, że określone pole nie ma zduplikowanych wartości we wszystkich dokumentach w kolekcji, podobnie jak w przypadku zachowania unikatowości klucza domyślnego _id . Indeksy niestandardowe można utworzyć w usłudze Azure Cosmos DB przy użyciu polecenia createIndex, w tym ograniczenia "unique".

Unikatowe indeksy są dostępne dla wszystkich kont usługi Azure Cosmos DB przy użyciu usługi Azure Cosmos DB dla bazy danych MongoDB.

Czas wygaśnięcia (TTL)

Usługa Azure Cosmos DB obsługuje tylko czas wygaśnięcia (TTL) na poziomie kolekcji (_ts) w wersji 3.2. Uaktualnij do wersji 3.6 lub nowszej, aby skorzystać z innych form czasu wygaśnięcia.

Zarządzanie użytkownikami i rolami

Usługa Azure Cosmos DB nie obsługuje jeszcze użytkowników i ról. Usługa Azure Cosmos DB obsługuje jednak kontrolę dostępu opartą na rolach (RBAC) platformy Azure oraz hasła/klucze tylko do odczytu i zapisu, które można uzyskać za pośrednictwem Azure Portal (strona Parametry połączenia).

Replikacja

Usługa Azure Cosmos DB obsługuje automatyczną, natywną replikację na najniższych warstwach. Ta logika została rozszerzona, aby osiągnąć małe opóźnienia oraz replikację globalną. Usługa Azure Cosmos DB nie obsługuje poleceń replikacji ręcznej.

Ustawienie Write Concern

Niektóre aplikacje korzystają z funkcji Write Concern , która określa liczbę odpowiedzi wymaganych podczas operacji zapisu. Ze względu na sposób, w jaki usługa Azure Cosmos DB obsługuje replikację w tle, wszystkie zapisy są domyślnie automatycznie kworum. Ustawienia Write Concern określone w kodzie klienta są ignorowane. Aby dowiedzieć się więcej, zobacz Maksymalizowanie dostępności i wydajności za pomocą poziomów spójności.

Dzielenie na fragmenty

Usługa Azure Cosmos DB obsługuje automatyczne dzielenie na fragmenty po stronie serwera. Automatycznie zarządza tworzeniem, umieszczaniem i równoważeniem fragmentów. Usługa Azure Cosmos DB nie obsługuje poleceń ręcznego dzielenia na fragmenty, co oznacza, że nie trzeba wywoływać poleceń, takich jak shardCollection, addShard, balancerStart, moveChunk itp. Klucz fragmentu należy określić tylko podczas tworzenia kontenerów lub wykonywania zapytań dotyczących danych.

Następne kroki