Unterstützte Features und Syntax in Azure Cosmos DB für MongoDB 3.2-Serverversion

Important

Möchten Sie eine vorhandene MongoDB-Anwendung migrieren oder MongoDB Query Language (MQL)-Features verwenden? Betrachten Sie Azure DocumentDB.

Suchen Sie nach einer Datenbanklösung für hochskalige Szenarien mit einer Vereinbarung über verfügbarkeitsbasierte Servicelevels (Service Level Agreement, SLA) von 99,999% Verfügbarkeit, sofortige Automatische Skalierung und automatisches Failover über mehrere Regionen hinweg? Erwägen Sie Azure Cosmos DB für NoSQL.

Mit Azure Cosmos DB für MongoDB 3.2 können Sie vertraute MongoDB-Features mit Funktionen auf Unternehmensniveau wie globaler Verteilung, automatischer Sharding und hoher Verfügbarkeit verwenden. In diesem Artikel werden die unterstützten Features, Syntax und Vorteile der Verwendung von Azure Cosmos DB für MongoDB 3.2 beschrieben.

Important

Version 3.2 der Azure Cosmos DB für MongoDB hat keine aktuellen Pläne für das Ende des Supports. Die Mindestbenachrichtigung für ein zukünftiges Ende des Supports 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 werden hier 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. Hier finden Sie die detaillierte Liste der derzeit unterstützten Vorgänge, Operatoren, Stufen, Befehle und Optionen.

Datenbankbefehle

Azure Cosmos DB for MongoDB unterstützt die folgenden Datenbankbefehle:

Note

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

Supported
delete ✅ Ja
find ✅ Ja
findAndModify ✅ Ja
getLastError ✅ Ja
getMore ✅ Ja
insert ✅ Ja
update ✅ Ja

Authentifizierungsbefehle

Supported
logout ✅ Ja
authenticate ✅ Ja
getnonce ✅ Ja

Verwaltungsbefehle

Supported
dropDatabase ✅ Ja
listCollections ✅ Ja
drop ✅ Ja
create ✅ Ja
filemd5 ✅ Ja
createIndexes ✅ Ja
listIndexes ✅ Ja
dropIndexes ✅ Ja
connectionStatus ✅ Ja
reIndex ✅ Ja

Diagnosebefehle

Supported
buildInfo ✅ Ja
collStats ✅ Ja
dbStats ✅ Ja
hostInfo ✅ Ja
listDatabases ✅ Ja
whatsmyuri ✅ Ja

Aggregationspipeline

Aggregationsbefehle

Supported
aggregate ✅ Ja
count ✅ Ja
distinct ✅ Ja

Aggregationsphasen

Supported
$project ✅ Ja
$match ✅ Ja
$limit ✅ Ja
$skip ✅ Ja
$unwind ✅ Ja
$group ✅ Ja
$sample ✅ Ja
$sort ✅ Ja
$lookup ✅ Ja
$out ✅ Ja
$count ✅ Ja
$addFields ✅ Ja

Aggregationsausdrücke

Boolesche Ausdrücke

Supported
$and ✅ Ja
$or ✅ Ja
$not ✅ Ja

Set-Ausdrücke

Supported
$setEquals ✅ Ja
$setIntersection ✅ Ja
$setUnion ✅ Ja
$setDifference ✅ Ja
$setIsSubset ✅ Ja
$anyElementTrue ✅ Ja
$allElementsTrue ✅ Ja

Vergleichsausdrücke

Supported
$cmp ✅ Ja
$eq ✅ Ja
$gt ✅ Ja
$gte ✅ Ja
$lt ✅ Ja
$lte ✅ Ja
$ne ✅ Ja

Arithmetische Ausdrücke

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

Zeichenfolgenausdrücke

Supported
$concat ✅ Ja
$indexOfBytes ✅ Ja
$indexOfCP ✅ Ja
$split ✅ Ja
$strLenBytes ✅ Ja
$strLenCP ✅ Ja
$strcasecmp ✅ Ja
$substr ✅ Ja
$substrBytes ✅ Ja
$substrCP ✅ Ja
$toLower ✅ Ja
$toUpper ✅ Ja

Arrayausdrücke

Supported
$arrayElemAt ✅ Ja
$concatArrays ✅ Ja
$filter ✅ Ja
$indexOfArray ✅ Ja
$isArray ✅ Ja
$range ✅ Ja
$reverseArray ✅ Ja
$size ✅ Ja
$slice ✅ Ja
$in ✅ Ja

Datumsausdrücke

Supported
$dayOfYear ✅ Ja
$dayOfMonth ✅ Ja
$dayOfWeek ✅ Ja
$year ✅ Ja
$month ✅ Ja
$week ✅ Ja
$hour ✅ Ja
$minute ✅ Ja
$second ✅ Ja
$millisecond ✅ Ja
$isoDayOfWeek ✅ Ja
$isoWeek ✅ Ja

Bedingte Ausdrücke

Supported
$cond ✅ Ja
$ifNull ✅ Ja

Aggregationsakkumulatoren

Supported
$sum ✅ Ja
$avg ✅ Ja
$first ✅ Ja
$last ✅ Ja
$max ✅ Ja
$min ✅ Ja
$push ✅ Ja
$addToSet ✅ Ja

Betriebspersonal

Folgende Operatoren werden mit den entsprechenden Verwendungsbeispielen unterstützt. Betrachten Sie dieses Beispieldokument, das in den Abfragen hier verwendet wird:

{
  "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"
}
Supported Example
eq ✅ Ja { "Volcano Name": { $eq: "Rainier" } }
gt ✅ Ja { "Elevation": { $gt: 4000 } }
gte ✅ Ja { "Elevation": { $gte: 4392 } }
lt ✅ Ja { "Elevation": { $lt: 5000 } }
lte ✅ Ja { "Elevation": { $lte: 5000 } }
ne ✅ Ja { "Elevation": { $ne: 1 } }
in ✅ Ja { "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } }
nin ✅ Ja { "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } }
or ✅ Ja { $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] }
and ✅ Ja { $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] }
not ✅ Ja { "Elevation": { $not: { $gt: 5000 } } }
nor ✅ Ja { $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] }
exists ✅ Ja { "Status": { $exists: true } }
type ✅ Ja { "Status": { $type: "string" } }
mod ✅ Ja { "Elevation": { $mod: [ 4, 0 ] } }
regex ✅ Ja { "Volcano Name": { $regex: "^Rain"} }

Hinweise

In $regex-Abfragen ermöglichen linksverankerte Ausdrücke eine Indexsuche. Die Verwendung des „i“-Modifizierers (keine Berücksichtigung der Groß-/Kleinschreibung) und des „m“-Modifizierers (mehrzeilig) bewirkt jedoch einen Collection-Scan in allen Ausdrucksebenen.

Wenn es erforderlich ist, $ oder | einzuschließen, ist es am besten, 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, um die Suche auf diese Dokumente zu beschränken, beginnend mit ^abc und der zweite Teil entspricht den genauen Einträgen. 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. Um den Index zu verwenden, unterteilen Sie die Abfrage in zwei verschiedene Abfragen, die vom $or-Operator verknüpft sind: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Aktualisierungsoperatoren

Operatoren für die Feldaktualisierung

Supported
$inc ✅ Ja
$mul ✅ Ja
$rename ✅ Ja
$setOnInsert ✅ Ja
$set ✅ Ja
$unset ✅ Ja
$min ✅ Ja
$max ✅ Ja
$currentDate ✅ Ja

Array-Aktualisierungsoperatoren

Supported
$addToSet ✅ Ja
$pop ✅ Ja
$pullAll ✅ Ja
$pull ✅ Ja
$pushAll ✅ Ja
$push ✅ Ja
$each ✅ Ja
$slice ✅ Ja
$sort ✅ Ja
$position ✅ Ja

Tip

$pull mit einer Bedingung wird nicht unterstützt.

Bitweiser Aktualisierungsoperator

Supported
$bit ✅ Ja

Geodätische Operatoren

Supported Example
$geoWithin ✅ Ja { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } }
$geoIntersects ✅ Ja { "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 ✅ Ja { "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 ✅ Ja { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } }
$geometry ✅ Ja { "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 ✅ Ja { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } }
$maxDistance ✅ Ja { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } }
$center ✅ Ja { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } }
$centerSphere ✅ Ja { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } }
$box ✅ Ja { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } }
$polygon ✅ Ja { "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 ] ] ] } } } }

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

Supported Example Hinweise
$all ✅ Ja { "Location.coordinates": { $all: [-121.758, 46.87] } }
$elemMatch ✅ Ja { "Location.coordinates": { $elemMatch: { $lt: 0 } } }
$size ✅ Ja { "Location.coordinates": { $size: 2 } }
$comment ✅ Ja { "Location.coordinates": { $elemMatch: { $lt: 0 } }, $comment: "Negative values"}
$text ✅ Ja Nicht unterstützt. Verwenden Sie stattdessen „$regex“.

Nicht unterstützte Operatoren

Azure Cosmos DB für MongoDB unterstützt die Operatoren $where und $eval nicht.

Methodik

Folgende Methoden werden unterstützt:

Cursormethoden

Supported Example Hinweise
cursor.sort() ✅ Ja 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 Azure rollenbasierte Zugriffssteuerung sowie Lese- und Schreibzugriff und schreibgeschützten Zugriff auf Kennwörter/Schlüssel, die über das Azure-Portal (Verbindungszeichenfolgenseite) 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.

Schreibsicherheit

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. Jede vom Clientcode angegebene Schreibsorge wird 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, was bedeutet, dass Sie keine solchen Befehle wie addShard, balancerStart und moveChunk ausführen müssen. Sie müssen beim Erstellen der Container oder Beim Abfragen der Daten nur den Shardschlüssel angeben.