Usługa Azure Cosmos DB dla bazy danych MongoDB (wersja 3.2): obsługiwane funkcje i składnia
DOTYCZY: MongoDB
Azure Cosmos DB to dystrybuowana globalnie, wielomodelowa usługa bazy danych udostępniana przez Microsoft. Możesz komunikować się z usługą Azure Cosmos DB dla bazy danych 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 bazy danych MongoDB, z których korzystasz, ze wszystkimi możliwościami przedsiębiorstwa zapewnianymi przez usługę Azure Cosmos DB: globalną dystrybucją, 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 wewnętrznie używają delete()
poleceń i update()
updateMany()
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 w 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
Method | 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 w kluczu domyślnym _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. Jednak usługa Azure Cosmos DB obsługuje 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 witryny 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 ręcznych poleceń fragmentowania, co oznacza, że nie trzeba wywoływać poleceń, takich jak shardCollection, addShard, balancerStart, moveChunk itp. Wystarczy określić klucz fragmentu podczas tworzenia kontenerów lub wykonywania zapytań dotyczących danych.
Następne kroki
- Dowiedz się, jak używać programu Studio 3T z usługą Azure Cosmos DB dla bazy danych MongoDB.
- Dowiedz się, jak używać narzędzia Robo 3T z usługą Azure Cosmos DB dla bazy danych MongoDB.
- Zapoznaj się z przykładami bazy danych MongoDB za pomocą usługi Azure Cosmos DB dla bazy danych MongoDB.