Unterstützte Features und Syntax in Azure Cosmos DB für MongoDB 4.0-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 4.0 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 4.0 beschrieben.

Protokollunterstützung

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. Wenn Sie Azure Cosmos DB for MongoDB-Konten erstellen, hat der Endpunkt bei der Kontoversion 3.6 und höher das Format *.mongo.cosmos.azure.com, während er bei der Kontoversion 3.2 das Format *.documents.azure.com hat.

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.

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:

Befehle für Abfrage- und Schreibvorgänge

Supported
change streams Yes
delete Yes
eval ✖️ Nein
find Yes
findAndModify Yes
getLastError Yes
getMore Yes
getPrevError ✖️ Nein
insert Yes
parallelCollectionScan ✖️ Nein
resetError ✖️ Nein
update Yes

Transaktionsbefehle

Supported
abortTransaction Yes
commitTransaction Yes

Authentifizierungsbefehle

Supported
authenticate Yes
getnonce Yes
logout Yes

Verwaltungsbefehle

Supported
cloneCollectionAsCapped ✖️ Nein
collMod ✖️ Nein
connectionStatus ✖️ Nein
convertToCapped ✖️ Nein
copydb ✖️ Nein
create Yes
createIndexes Yes
currentOp Yes
drop Yes
dropDatabase Yes
dropIndexes Yes
filemd5 Yes
killCursors Yes
killOp ✖️ Nein
listCollections Yes
listDatabases Yes
listIndexes Yes
reIndex Yes
renameCollection ✖️ Nein

Diagnosebefehle

Supported
buildInfo Yes
collStats Yes
connPoolStats ✖️ Nein
connectionStatus ✖️ Nein
dataSize ✖️ Nein
dbHash ✖️ Nein
dbStats Yes
explain Yes
features ✖️ Nein
hello Yes
hostInfo Yes
listDatabases Yes
listCommands ✖️ Nein
profiler ✖️ Nein
serverStatus ✖️ Nein
top ✖️ Nein
whatsmyuri Yes

Aggregationspipeline

Aggregationsbefehle

Supported
aggregate Yes
count Yes
distinct Yes
mapReduce ✖️ Nein

Aggregationsphasen

Supported
addFields Yes
bucket ✖️ Nein
bucketAuto ✖️ Nein
changeStream Yes
collStats ✖️ Nein
count Yes
currentOp ✖️ Nein
facet Yes
geoNear Yes
graphLookup Yes
group Yes
indexStats ✖️ Nein
limit Yes
listLocalSessions ✖️ Nein
listSessions ✖️ Nein
lookup ❓Teilweise
match Yes
out Yes
project Yes
redact Yes
replaceRoot Yes
replaceWith ✖️ Nein
sample Yes
skip Yes
sort Yes
sortByCount Yes
unwind Yes

Note

$lookup unterstützt die in der Serverversion 3.6 eingeführte Funktion der nicht korrelierten Unterabfragen noch nicht. Sie erhalten eine Fehlermeldung mit einer Meldung, die enthält let is not supported , wenn Sie versuchen, den $lookup Operator mit let und pipeline Feldern zu verwenden.

Boolesche Ausdrücke

Supported
and Yes
not Yes
or Yes

Umwandlungsausdrücke

Supported
convert Yes
toBool Yes
toDate Yes
toDecimal Yes
toDouble Yes
toInt Yes
toLong Yes
toObjectId Yes
toString Yes

Set-Ausdrücke

Supported
setEquals Yes
setIntersection Yes
setUnion Yes
setDifference Yes
setIsSubset Yes
anyElementTrue Yes
allElementsTrue Yes

Vergleichsausdrücke

Note

Die API für MongoDB unterstützt keine Vergleichsausdrücke mit einem Array-Literal in der Abfrage.

Supported
cmp Yes
eq Yes
gt Yes
gte Yes
lt Yes
lte Yes
ne Yes
in Yes
nin Yes

Arithmetische Ausdrücke

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

Zeichenfolgenausdrücke

Supported
concat Yes
indexOfBytes Yes
indexOfCP Yes
ltrim Yes
rtrim Yes
trim Yes
split Yes
strLenBytes Yes
strLenCP Yes
strcasecmp Yes
substr Yes
substrBytes Yes
substrCP Yes
toLower Yes
toUpper Yes

Operator für die Textsuche

Supported
meta ✖️ Nein

Arrayausdrücke

Supported
arrayElemAt Yes
arrayToObject Yes
concatArrays Yes
filter Yes
indexOfArray Yes
isArray Yes
objectToArray Yes
range Yes
reverseArray Yes
reduce Yes
size Yes
slice Yes
zip Yes
in Yes

Variablenoperatoren

Supported
map Yes
let Yes

Systemvariablen

Supported
$$CURRENT Yes
$$DESCEND Yes
$$KEEP Yes
$$PRUNE Yes
$$REMOVE Yes
$$ROOT Yes

Literaloperator

Supported
literal Yes

Datumsausdrücke

Supported
dayOfYear Yes
dayOfMonth Yes
dayOfWeek Yes
year Yes
month Yes
week Yes
hour Yes
minute Yes
second Yes
millisecond Yes
dateToString Yes
isoDayOfWeek Yes
isoWeek Yes
dateFromParts Yes
dateToParts Yes
dateFromString Yes
isoWeekYear Yes

Bedingte Ausdrücke

Supported
cond Yes
ifNull Yes
switch Yes

Datentypoperator

Supported
type Yes

Akkumulatorausdrücke

Supported
sum Yes
avg Yes
first Yes
last Yes
max Yes
min Yes
push Yes
addToSet Yes
stdDevPop Yes
stdDevSamp Yes

Zusammenführungsoperator

Supported
mergeObjects Yes

Datentypen

Azure Cosmos DB für MongoDB unterstützt Dokumente, die im MongoDB-Binär-JSON-Format (BSON) codiert sind. Die API-Version 4.0 verbessert die interne Verwendung dieses Formats, um die Leistung zu verbessern und Kosten zu senken. Dokumente, die über einen Endpunkt mit 4.0 und höher geschrieben oder aktualisiert werden, profitieren von der Optimierung.

In einem Upgradeszenario auf Version 4.0 oder höher profitieren Dokumente, die vor dem Upgrade erstellt wurden, nicht sofort von der verbesserten Leistung. Aktualisieren Sie diese Dokumente mithilfe eines Schreibvorgangs mithilfe des 4.0-Endpunkts, um die Vorteile der Verbesserungen zu nutzen.

16 MB Dokumentunterstützung erhöht die Größenbeschränkung für Dokumente von 2 MB auf 16 MB. Dieser Grenzwert gilt nur für Sammlungen, die nach dem Aktivieren des Features erstellt wurden. Nachdem Sie dieses Feature für ein Datenbankkonto aktiviert haben, kann es nicht deaktiviert werden.

Das Aktivieren von 16 MB kann auf der Registerkarte "Features" im Azure-Portal oder programmgesteuert durch Hinzufügen der EnableMongo16MBDocumentSupport Funktion erfolgen.

Wir empfehlen, die serverseitige Wiederholung zu aktivieren und Platzhalterindizes zu vermeiden, um den Erfolg von Anfragen mit größeren Dokumenten sicherzustellen. Bei Bedarf kann die Erhöhung der Anfrageeinheiten für Datenbanken oder Sammlungen auch die Leistung verbessern.

Supported
Double Yes
String Yes
Object Yes
Array Yes
Binary Data Yes
ObjectId Yes
Boolean Yes
Date Yes
Null Yes
32-bit Integer (int) Yes
Timestamp Yes
64-bit Integer (long) Yes
MinKey Yes
MaxKey Yes
Decimal128 Yes
Regular Expression Yes
JavaScript Yes
JavaScript (with scope) Yes
Undefined Yes

Indizes und Indexeigenschaften

Indizes

Supported
Single Field Index Yes
Compound Index Yes
Multikey Index Yes
Text Index ✖️ Nein
2dsphere Yes
2d Index ✖️ Nein
Hashed Index ✖️ Nein

Indexeigenschaften

Supported
TTL Yes
Unique Yes
Partial ✖️ Nein
Case Insensitive ✖️ Nein
Sparse ✖️ Nein
Background Yes

Betriebspersonal

Logische Operatoren

Supported
or Yes
and Yes
not Yes
nor Yes

Elementoperatoren

Supported
exists Yes
type Yes

Abfrageoperatoren für die Auswertung

Supported
expr Yes
jsonSchema ✖️ Nein
mod Yes
regex Yes
text ✖️ Nein
where ✖️ Nein

In $regex-Abfragen ermöglichen linksverankerte Ausdrücke eine Indexsuche. Die Verwendung des i-Modifizierers (Groß-/Kleinschreibung ignorierend) und des m-Modifizierers (mehrzeilig) bewirkt jedoch, dass die Durchsuchung der Sammlung in allen Ausdrücken erfolgt.

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/}] }).

Tip

Der text Befehl wird nicht unterstützt. Verwenden Sie stattdessen $regex.

Arrayoperatoren

Supported
all Yes
elemMatch Yes
size Yes

Kommentaroperator

Supported
comment Yes

Projektionsoperatoren

Supported
elemMatch Yes
meta ✖️ Nein
slice Yes

Aktualisierungsoperatoren

Operatoren für die Feldaktualisierung

Supported
inc Yes
mul Yes
rename Yes
setOnInsert Yes
set Yes
unset Yes
min Yes
max Yes
currentDate Yes

Array-Aktualisierungsoperatoren

Supported
$ Yes
$[] Yes
$[\<identifier\>] Yes
addToSet Yes
pop Yes
pullAll Yes
pull Yes
push Yes
pushAll Yes

Modifikatoren aktualisieren

Supported
each Yes
slice Yes
sort Yes
position Yes

Bitweiser Aktualisierungsoperator

Supported
bit Yes
bitsAllSet ✖️ Nein
bitsAnySet ✖️ Nein
bitsAllClear ✖️ Nein
bitsAnyClear ✖️ Nein

Geodätische Operatoren

Supported
$geoWithin Yes
$geoIntersects Yes
$near Yes
$nearSphere Yes
$geometry Yes
$minDistance Yes
$maxDistance Yes
$center ✖️ Nein
$centerSphere ✖️ Nein
$box ✖️ Nein
$polygon ✖️ Nein

Sortiervorgänge

Wenn Sie den Vorgang findOneAndUpdate mit der API für MongoDB (Version 4.0) verwenden, werden Sortiervorgänge für ein einzelnes Feld und mehrere Felder unterstützt. Sortiervorgänge über mehrere Felder waren eine Einschränkung früherer Wire-Protokolle.

Indizierung

Die API für MongoDB unterstützt verschiedene Indizes, um die Sortierung nach mehreren Feldern zu ermöglichen, die Abfrageleistung zu verbessern und Eindeutigkeit zu erzwingen.

GridFS

Azure Cosmos DB unterstützt GridFS über jeden GridFS-kompatiblen Mongo-Treiber.

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.

Wiederholbare Schreibvorgänge

Wiederholbare Schreibvorgänge ermöglichen es MongoDB-Treibern, bestimmte Schreibvorgänge beim Auftreten eines Fehlers automatisch zu wiederholen. Das führt aber zu strengeren Anforderungen bei bestimmten Vorgängen, die den Anforderungen des MongoDB-Protokolls entsprechen. Wenn dieses Feature aktiviert ist, müssen Aktualisierungsvorgänge, einschließlich Löschvorgängen, in shardierten Sammlungen den Shardschlüssel in den Abfragefilter oder die Update-Anweisung einschließen.

Bei einer sharded-Auflistung wird z. B. auf Schlüssel regiongehardet: Um alle Dokumente mit dem Feld city = "NYC"zu löschen, muss die Anwendung den Vorgang für alle Shardschlüsselwerte (Region) ausführen, wenn wiederholungsfähige Schreibvorgänge aktiviert sind.

  • db.coll.deleteMany({"region": "USA", "city": "NYC"}) - Erfolg mit Nachricht Success
  • db.coll.deleteMany({"city": "NYC"}) - Scheitert mit Fehler ShardKeyNotFound(61)

Note

Wiederholbare Schreibvorgänge unterstützen derzeit keine großen ungeordneten Schreibvorgänge. Wenn Sie Massenschreibvorgänge mit Aktivierung wiederholbarer Schreibvorgänge durchführen möchten, führen Sie geordnete Massenschreibvorgänge durch.

Um das Feature zu aktivieren, fügen Sie die Funktion „EnableMongoRetryableWrites“ Ihrem Datenbankkonto hinzu. Dieses Feature kann auch im Azure-Portal auf der Registerkarte „Features“ aktiviert werden.

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.

Sitzungen

Azure Cosmos DB unterstützt noch nicht serverseitige Sitzungsbefehle.

Gültigkeitsdauer (TTL)

Azure Cosmos DB unterstützt eine Gültigkeitsdauer (Time-to-live, TTL) basierend auf dem Zeitstempel des Dokuments. TTL kann für Sammlungen über das Azure-Portal aktiviert werden.

Transaktionen

Transaktionen mit mehreren Dokumenten werden in einer nicht geshardeten Sammlung unterstützt. Transaktionen mit mehreren Dokumenten werden nicht über mehrere Sammlungen hinweg oder in gesharteten Sammlungen unterstützt. Das Timeout für Transaktionen ist auf fünf Sekunden festgelegt.

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.

Schreibsicherheit

Einige Anwendungen sind auf eine Schreibbestätigung angewiesen, die die Anzahl der Antworten angibt, 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.