Azure Cosmos DB for MongoDB (Version 3.2): unterstützte Features und Syntax
GILT FÜR: MongoDB
Azure Cosmos DB ist ein global verteilter Datenbankdienst von Microsoft mit mehreren Modellen. Sie können mit der API für Azure Cosmos DB for MongoDB über einen der Open-Source-MongoDB-Clienttreiber kommunizieren. Die API für Azure Cosmos DB for MongoDB ermöglicht die Verwendung vorhandener Clienttreiber über das Wire Protocol von MongoDB.
Wenn Sie Azure Cosmos DB for MongoDB verwenden, können Sie die Vorteile der vertrauten MongoDB mit allen Unternehmensfunktionen von Azure Cosmos DB kombinieren. Hierzu gehören: globale Verteilung, automatisches Sharding, Gewährleistung der Verfügbarkeit und Latenz, automatische Indizierung der einzelnen Felder, Verschlüsselung ruhender Daten, Sicherungen und vieles mehr.
Hinweis
Für Version 3.2 der Azure Cosmos DB-API für MongoDB gibt es zurzeit keine Pläne zum Ende der Lebensdauer (End Of Life, EOL). Die Mindestbenachrichtigungsperiode für ein zukünftiges EOL beträgt drei Jahre.
Protokollunterstützung
Alle neuen Konten für Azure Cosmos DB for MongoDB sind mit der MongoDB-Serverversion 3.6 kompatibel. In diesem Artikel wird die MongoDB-Version 3.2 behandelt. Die unterstützten Operatoren und alle Einschränkungen oder Ausnahmen sind unten aufgeführt. Alle Clienttreiber, die diese Protokolle verstehen, sollten auch mit der API für Azure Cosmos DB for MongoDB eine Verbindung herstellen können.
Außerdem bietet Azure Cosmos DB for MongoDB eine nahtlose Upgradeerfahrung zum Qualifizieren von Konten. Weitere Informationen finden Sie im Upgradehandbuch für MongoDB.
Unterstützung der Abfragesprache
Azure Cosmos DB for MongoDB bietet umfassende Unterstützung für MongoDB-Abfragesprachkonstrukte. Im Anschluss finden Sie eine detaillierte Aufstellung der aktuell unterstützten Vorgänge, Operatoren, Phasen, Befehle und Optionen:
Datenbankbefehle
Azure Cosmos DB for MongoDB unterstützt die folgenden Datenbankbefehle:
Hinweis
Dieser Artikel enthält nur die unterstützten Serverbefehle und keine clientseitigen Wrapperfunktionen. Für clientseitige Wrapperfunktionen, z. B. deleteMany()
und updateMany()
, werden intern die Serverbefehle delete()
und update()
genutzt. Funktionen, die unterstützte Serverbefehle nutzen, sind mit Azure Cosmos DB for MongoDB kompatibel.
Befehle für Abfrage- und Schreibvorgänge
delete
find
findAndModify
getLastError
getMore
insert
update
Authentifizierungsbefehle
logout
authenticate
getnonce
Verwaltungsbefehle
dropDatabase
listCollections
drop
create
filemd5
createIndexes
listIndexes
dropIndexes
connectionStatus
reIndex
Diagnosebefehle
buildInfo
collStats
dbStats
hostInfo
listDatabases
whatsmyuri
Aggregationspipeline
Aggregationsbefehle
aggregate
count
distinct
Aggregationsphasen
$project
$match
$limit
$skip
$unwind
$group
$sample
$sort
$lookup
$out
$count
$addFields
Aggregationsausdrücke
Boolesche Ausdrücke
$and
$or
$not
Set-Ausdrücke
$setEquals
$setIntersection
$setUnion
$setDifference
$setIsSubset
$anyElementTrue
$allElementsTrue
Vergleichsausdrücke
$cmp
$eq
$gt
$gte
$lt
$lte
$ne
Arithmetische Ausdrücke
$abs
$add
$ceil
$divide
$exp
$floor
$ln
$log
$log10
$mod
$multiply
$pow
$sqrt
$subtract
$trunc
Zeichenfolgenausdrücke
$concat
$indexOfBytes
$indexOfCP
$split
$strLenBytes
$strLenCP
$strcasecmp
$substr
$substrBytes
$substrCP
$toLower
$toUpper
Arrayausdrücke
$arrayElemAt
$concatArrays
$filter
$indexOfArray
$isArray
$range
$reverseArray
$size
$slice
$in
Datumsausdrücke
$dayOfYear
$dayOfMonth
$dayOfWeek
$year
$month
$week
$hour
$minute
$second
$millisecond
$isoDayOfWeek
$isoWeek
Bedingte Ausdrücke
$cond
$ifNull
Aggregationsakkumulatoren
$sum
$avg
$first
$last
$max
$min
$push
$addToSet
Operatoren
Folgende Operatoren werden mit den entsprechenden Verwendungsbeispielen unterstützt. Berücksichtigen Sie dieses in den folgenden Abfragen verwendete Beispieldokument:
{
"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 | Beispiel |
---|---|
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"} } |
Notizen
In $regex-Abfragen lassen linksverankerte Ausdrücke die Indexsuche zu. Die Verwendung des „i“-Modifizierers (keine Berücksichtigung der Groß-/Kleinschreibung) und des „m“-Modifizierers (mehrere Zeilen) führt jedoch zur Sammlungsüberprüfung in allen Ausdrücken.
Wenn „$“ oder „|“ einbezogen werden muss, empfiehlt es sich, zwei (oder mehr) RegEx-Abfragen zu erstellen.
Die folgende ursprüngliche Abfrage find({x:{$regex: /^abc$/})
muss beispielsweise wie folgt geändert werden: find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
.
Der erste Teil verwendet den Index zum Einschränken der Suche auf die Dokumente, die mit „^abc“ beginnen, und der zweite Teil stimmt die exakten Einträge ab.
Der Strichoperator „|“ dient als „oder“-Funktion: Die Abfrage find({x:{$regex: /^abc|^def/})
stimmt die Dokumente ab, in denen das Feld „x“ Werte enthält, die mit „abc“ oder „def“ beginnen. Zur Nutzung des Index wird empfohlen, die Abfrage in zwei unterschiedliche Abfragen zu unterteilen, die durch den „$or“-Operator verbunden sind: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] })
.
Aktualisierungsoperatoren
Operatoren für die Feldaktualisierung
$inc
$mul
$rename
$setOnInsert
$set
$unset
$min
$max
$currentDate
Operatoren für die Arrayaktualisierung
$addToSet
$pop
$pullAll
$pull
(Hinweis: „$pull“ mit Bedingung wird nicht unterstützt.)$pushAll
$push
$each
$slice
$sort
$position
Bitweiser Updateoperator
$bit
Räumliche Operatoren
Operator | Beispiel | Unterstützt |
---|---|---|
$geoWithin |
{ "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } |
Ja |
$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 ] ] ] } } } } |
Ja |
$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 ] ] ] } } } } |
Ja |
$nearSphere |
{ "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } |
Ja |
$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 ] ] ] } } } } |
Ja |
$minDistance |
{ "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } |
Ja |
$maxDistance |
{ "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } |
Ja |
$center |
{ "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } |
Ja |
$centerSphere |
{ "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } |
Ja |
$box |
{ "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } |
Ja |
$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 ] ] ] } } } } |
Ja |
Sortiervorgänge
Wenn Sie den Vorgang findOneAndUpdate
verwenden, werden Sortiervorgänge für ein einzelnes Feld unterstützt, Sortiervorgänge für mehrere Felder aber nicht.
Andere Operatoren
Operator | Beispiel | Hinweise |
---|---|---|
$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 |
Wird nicht unterstützt. Verwenden Sie stattdessen „$regex“. |
Nicht unterstützte Operatoren
Die Operatoren $where
und $eval
werden von Azure Cosmos DB nicht unterstützt.
Methoden
Folgende Methoden werden unterstützt:
Cursormethoden
Methode | Beispiel | Hinweise |
---|---|---|
cursor.sort() |
cursor.sort({ "Elevation": -1 }) |
Dokumente ohne Sortierschlüssel werden nicht zurückgegeben. |
Eindeutige Indizes
Azure Cosmos DB indiziert jedes Feld in Dokumenten, die standardmäßig in die Datenbank geschrieben werden. Durch eindeutige Indizes wird sichergestellt, dass ein bestimmtes Feld keine doppelten Werte in einem Dokument einer Sammlung enthält. Dies ist vergleichbar mit der Wahrung der Eindeutigkeit für den Standardschlüssel _id
. Sie können benutzerdefinierte Indizes in Azure Cosmos DB erstellen, indem Sie den Befehl „createIndex“ einschließlich der Einschränkung „unique“ verwenden.
Eindeutige Indizes sind für alle Azure Cosmos DB-Konten verfügbar, die Azure Cosmos DB for MongoDB verwenden.
Gültigkeitsdauer (TTL)
Azure Cosmos DB unterstützt in Version 3.2 nur eine Gültigkeitsdauer (Time-to-Live, TTL) auf Sammlungsebene (_ts). Führen Sie ein Upgrade auf Version 3.6 und höher aus, um andere Formen von TTLzu nutzen.
Benutzer- und Rollenverwaltung
Azure Cosmos DB unterstützt noch nicht Benutzer und Rollen. Azure Cosmos DB unterstützt jedoch die rollenbasierte Zugriffssteuerung in Azure (Azure RBAC) sowie Lese-/Schreibkennwörter/-schlüssel und Schreibschutzkennwörter/-schlüssel, die über das Azure-Portal (Seite „Verbindungszeichenfolge“) abgerufen werden können.
Replikation
Azure Cosmos DB unterstützt die automatische, native Replikation auf den niedrigsten Ebenen. Diese Logik wird erweitert, um auch die globale Replikation mit geringer Latenz zu erreichen. Azure Cosmos DB unterstützt keine manuellen Replikationsbefehle.
Schreibbestätigung
Einige Anwendungen unterstützen eine Schreibbestätigung. Hiermit wird die Anzahl von Antworten angegeben, die während eines Schreibvorgangs erforderlich sind. Aufgrund der Art und Weise, in der Azure Cosmos DB die Replikation im Hintergrund durchführt, gilt für alle Schreibvorgänge automatisch und standardmäßig ein Quorum. Alle Schreibvorgänge, die durch den Clientcode angegeben werden, werden ignoriert. Weitere Informationen finden Sie unter Verwenden von Konsistenzebenen zum Maximieren der Verfügbarkeit und Leistung.
Sharding (Horizontales Partitionieren)
Azure Cosmos DB unterstützt das automatische, serverseitige Sharding. Die Erstellung, die Platzierung und der Ausgleich von Shards wird automatisch verwaltet. Azure Cosmos DB unterstützt keine manuellen Shardingbefehle. Dies bedeutet, dass Sie Befehle wie „addShard“, „balancerStart“, „moveChunk“ usw. nicht aufrufen müssen. Sie müssen beim Erstellen der Container oder beim Abfragen der Daten nur den Shardschlüssel angeben.