Azure Cosmos DB for MongoDB (Serverversion 4.2): unterstützte Features und Syntax

GILT FÜR: MongoDB

Azure Cosmos DB ist ein global verteilter Datenbankdienst von Microsoft mit mehreren Modellen. Azure Cosmos DB bietet mehrere Datenbank-APIs. Sie können mit der Azure Cosmos DB for MongoDB mittels einem der Open-Source-MongoDB-Clienttreiber kommunizieren. Die Azure Cosmos DB for MongoDB unterstützt die Verwendung vorhandener Clienttreiber, indem das MongoDB-Leitungsprotokoll eingehalten wird.

Wenn Sie die API für Azure Cosmos DB for MongoDB verwenden, können Sie die Vorteile der vertrauten MongoDB mit allen von Azure Cosmos DB gebotenen Unternehmensfunktionen kombinieren. Dazu gehören globale Verteilung, automatisches Sharding, Gewährleistung der Verfügbarkeit und Wartezeit, Verschlüsselung ruhender Daten, Sicherungen und vieles mehr.

Protokollunterstützung

Die unterstützten Operatoren und alle Einschränkungen oder Ausnahmen sind in diesem Artikel 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, verfügt die Kontenversion 3.6+ über einen Endpunkt im Format*.mongo.cosmos.azure.com. Die 3.2-Version von Konten verfügt über einen Endpunkt im Format *.documents.azure.com.

Hinweis

Dieser Artikel führt nur die unterstützten Serverbefehle und keine clientseitigen Wrapperfunktionen auf. 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. In den nachstehenden Abschnitten 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.

Befehle für Abfrage- und Schreibvorgänge

Get-Help Unterstützt
change streams Ja
delete Ja
eval Keine
find Ja
findAndModify Ja
getLastError Ja
getMore Ja
getPrevError Keine
insert Ja
parallelCollectionScan Nein
resetError Nr.
update Ja

Transaktionsbefehle

Hinweis

Transaktionen mit mehreren Dokumenten werden nur innerhalb einer einzelnen Sammlung ohne Sharding unterstützt. Sammlungsübergreifende und shardübergreifende Transaktionen mit mehreren Dokumenten werden in der API für MongoDB noch nicht unterstützt.

Get-Help Unterstützt
abortTransaction Ja
commitTransaction Ja

Authentifizierungsbefehle

Get-Help Unterstützt
authenticate Ja
getnonce Ja
logout Ja

Verwaltungsbefehle

Get-Help Unterstützt
cloneCollectionAsCapped Nein
collMod Keine
connectionStatus Keine
convertToCapped Keine
copydb Nr.
create Ja
createIndexes Ja
currentOp Ja
drop Ja
dropDatabase Ja
dropIndexes Ja
filemd5 Ja
killCursors Ja
killOp Keine
listCollections Ja
listDatabases Ja
listIndexes Ja
reIndex Ja
renameCollection Nein

Diagnosebefehle

Get-Help Unterstützt
buildInfo Ja
collStats Ja
connPoolStats Nein
connectionStatus Keine
dataSize Keine
dbHash Nr.
dbStats Ja
explain Ja
features Keine
hostInfo Ja
listDatabases Ja
listCommands Nein
profiler Keine
serverStatus Keine
top Nr.
whatsmyuri Ja

Aggregationspipeline

Azure Cosmos DB for MongoDB unterstützt die folgenden Aggregationsbefehle.

Aggregationsbefehle

Get-Help Unterstützt
aggregate Ja
count Ja
distinct Ja
mapReduce Nein

Aggregationsphasen

Get-Help Unterstützt
addFields Ja
bucket Nein
bucketAuto Nr.
changeStream Ja
collStats Keine
count Ja
currentOp Keine
facet Ja
geoNear Ja
graphLookup Keine
group Ja
indexStats Keine
limit Ja
listLocalSessions Nein
listSessions Nein
lookup Partial
match Ja
merge Ja
out Ja
planCacheStats Ja
project Ja
redact Ja
regexFind Ja
regexFindAll Ja
regexMatch Ja
replaceRoot Ja
replaceWith Ja
sample Ja
set Ja
skip Ja
sort Ja
sortByCount Ja
unset Ja
unwind Ja

Hinweis

Von der $lookup-Aggregation wird das in Serverversion 3.6 eingeführte Feature für nicht korrelierte Unterabfragen nicht unterstützt. Wenn Sie versuchen, den $lookup Operator mit den let Feldern und pipeline zu verwenden, wird eine Fehlermeldung angezeigt, die angibt, dass dieselet nicht unterstützt wird.

Boolesche Ausdrücke

Get-Help Unterstützt
and Ja
not Ja
or Ja

Konvertierungsausdrücke

Get-Help Unterstützt
convert Ja
toBool Ja
toDate Ja
toDecimal Ja
toDouble Ja
toInt Ja
toLong Ja
toObjectId Ja
toString Ja

Set-Ausdrücke

Get-Help Unterstützt
setEquals Ja
setIntersection Ja
setUnion Ja
setDifference Ja
setIsSubset Ja
anyElementTrue Ja
allElementsTrue Ja

Vergleichsausdrücke

Hinweis

Die API für MongoDB unterstützt keine Vergleichsausdrücke, die über ein Arrayliteral in der Abfrage verfügen.

Get-Help Unterstützt
cmp Ja
eq Ja
gt Ja
gte Ja
lt Ja
lte Ja
ne Ja
in Ja
nin Ja

Arithmetische Ausdrücke

Get-Help Unterstützt
abs Ja
add Ja
ceil Ja
divide Ja
exp Ja
floor Ja
ln Ja
log Ja
log10 Ja
mod Ja
multiply Ja
pow Ja
round Ja
sqrt Ja
subtract Ja
trunc Ja

Trigonometrieausdrücke

Get-Help Unterstützt
acos Ja
acosh Ja
asin Ja
asinh Ja
atan Ja
atan2 Ja
atanh Ja
cos Ja
cosh Ja
degreesToRadians Ja
radiansToDegrees Ja
sin Ja
sinh Ja
tan Ja
tanh Ja

Zeichenfolgenausdrücke

Get-Help Unterstützt
concat Ja
indexOfBytes Ja
indexOfCP Ja
ltrim Ja
rtrim Ja
trim Ja
split Ja
strLenBytes Ja
strLenCP Ja
strcasecmp Ja
substr Ja
substrBytes Ja
substrCP Ja
toLower Ja
toUpper Ja

Operator für die Textsuche

Get-Help Unterstützt
meta Nein

Arrayausdrücke

Get-Help Unterstützt
arrayElemAt Ja
arrayToObject Ja
concatArrays Ja
filter Ja
indexOfArray Ja
isArray Ja
objectToArray Ja
range Ja
reverseArray Ja
reduce Ja
size Ja
slice Ja
zip Ja
in Ja

Variablenoperatoren

Get-Help Unterstützt
map Ja
let Ja

Systemvariablen

Get-Help Unterstützt
$$CLUSTERTIME Ja
$$CURRENT Ja
$$DESCEND Ja
$$KEEP Ja
$$NOW Ja
$$PRUNE Ja
$$REMOVE Ja
$$ROOT Ja

Literaloperator

Get-Help Unterstützt
literal Ja

Datumsausdrücke

Get-Help Unterstützt
dayOfYear Ja
dayOfMonth Ja
dayOfWeek Ja
year Ja
month Ja
week Ja
hour Ja
minute Ja
second Ja
millisecond Ja
dateToString Ja
isoDayOfWeek Ja
isoWeek Ja
dateFromParts Ja
dateToParts Ja
dateFromString Ja
isoWeekYear Ja

Bedingte Ausdrücke

Get-Help Unterstützt
cond Ja
ifNull Ja
switch Ja

Datentypoperator

Get-Help Unterstützt
type Ja

Akkumulatorausdrücke

Get-Help Unterstützt
sum Ja
avg Ja
first Ja
last Ja
max Ja
min Ja
push Ja
addToSet Ja
stdDevPop Ja
stdDevSamp Ja

Zusammenführungsoperator

Get-Help Unterstützt
mergeObjects Ja

Datentypen

Azure Cosmos DB for MongoDB unterstützt Dokumente, die im BSON-Format von MongoDB codiert wurden. Die Versionen 4.0 und neuer (4.0+) erweitern die interne Nutzung 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 dieser Optimierung.

In einem Upgradeszenario profitieren Dokumente, die vor dem Upgrade auf Version 4.0 und höher geschrieben wurden, so lange nicht von der verbesserten Leistung, bis sie durch einen Schreibvorgang über den Endpunkt 4.0 und höher aktualisiert werden.

Die Unterstützung von 16 MB-Dokumenten erhöht das Größenlimit für Ihre Dokumente von 2 MB auf 16 MB. Dieses Limit gilt nur für Sammlungen, die nach der Aktivierung dieses Features erstellt wurden. Wenn dieses Feature für Ihr Datenbankkonto aktiviert wurde, kann es nicht mehr deaktiviert werden.

Um die Dokumentunterstützung von 16 MB zu aktivieren, ändern Sie die Einstellung auf der Registerkarte Features für die Ressource im Azure-Portal, oder fügen Sie die EnableMongo16MBDocumentSupport Funktion programmgesteuert hinzu.

Wir empfehlen, serverseitige Wiederholung zu aktivieren und die Verwendung von Wildcardindizes zu vermeiden, um sicherzustellen, dass Anforderungen in größeren Dokumenten erfolgreich sind. Durch das Erhöhen Ihrer Datenbank- oder Sammlungsanforderungseinheiten kann auch die Leistung verbessert werden.

Get-Help Unterstützt
Double Ja
String Ja
Object Ja
Array Ja
Binary Data Ja
ObjectId Ja
Boolean Ja
Date Ja
Null Ja
32-bit Integer (int) Ja
Timestamp Ja
64-bit Integer (long) Ja
MinKey Ja
MaxKey Ja
Decimal128 Ja
Regular Expression Ja
JavaScript Ja
JavaScript (with scope) Ja
Undefined Ja

Indizes und Indexeigenschaften

Azure Cosmos DB for MongoDB unterstützt die folgenden Indexbefehle und -eigenschaften.

Indizes

Get-Help Unterstützt
Single Field Index Ja
Compound Index Ja
Multikey Index Ja
Text Index Keine
2dsphere Ja
2d Index Nein
Hashed Index Nein

Indexeigenschaften

Get-Help Unterstützt
TTL Ja
Unique Ja
Partial Wird nur für eindeutige Indizes unterstützt
Case Insensitive Nein
Sparse Nr.
Background Ja

Operatoren

Azure Cosmos DB for MongoDB utnerstützt die folgenden Operatoren.

Logische Operatoren

Get-Help Unterstützt
or Ja
and Ja
not Ja
nor Ja

Elementoperatoren

Get-Help Unterstützt
exists Ja
type Ja

Abfrageoperatoren für die Auswertung

Get-Help Unterstützt
expr Ja
jsonSchema Keine
mod Ja
regex Ja
text Neun (Wird nicht unterstützt. Verwenden Sie stattdessen $regex.)
where Nein

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.

Ändern Sie beispielsweise die folgende ursprüngliche Originalabfrage:

find({x:{$regex: /^abc$/})

Zu diese Abfrage:

find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})

Der erste Teil der geänderten Abfrage verwendet den Index, um die Suche auf Dokumente zu beschränken, die mit ^abc beginnen. Der zweite Teil der Abfrage entspricht den genauen Einträgen. Der Balkenoperator (|) fungiert 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, wird empfohlen, die Abfrage in zwei verschiedene Abfragen zu unterteilen, die durch den $or Operator verknüpft werden: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Arrayoperatoren

Get-Help Unterstützt
all Ja
elemMatch Ja
size Ja

Kommentaroperator

Get-Help Unterstützt
comment Ja

Projektionsoperatoren

Get-Help Unterstützt
elemMatch Ja
meta Keine
slice Ja

Aktualisierungsoperatoren

Operatoren für die Feldaktualisierung

Get-Help Unterstützt
inc Ja
mul Ja
rename Ja
setOnInsert Ja
set Ja
unset Ja
min Ja
max Ja
currentDate Ja

Operatoren für die Arrayaktualisierung

Get-Help Unterstützt
$ Ja
$[] Ja
$[\<identifier\>] Ja
addToSet Ja
pop Ja
pullAll Ja
pull Ja
push Ja
pushAll Ja

Aktualisierungsmodifizierer

Get-Help Unterstützt
each Ja
slice Ja
sort Ja
position Ja

Bitweiser Updateoperator

Get-Help Unterstützt
bit Ja
bitsAllSet Nein
bitsAnySet Keine
bitsAllClear Keine
bitsAnyClear Nein

Räumliche Operatoren

Operator Unterstützt
$geoWithin Ja
$geoIntersects Ja
$near Ja
$nearSphere Ja
$geometry Ja
$minDistance Ja
$maxDistance Ja
$center Nein
$centerSphere Keine
$box Keine
$polygon Nein

Sortiervorgänge

Wenn Sie die findOneAndUpdate-Operation nutzen, sortieren Sie die Operationen in einem Einzelfeld werden unterstützt. Sortiervorgänge für mehrere Felder werden nicht unterstützt.

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.

Clientseitige Verschlüsselung auf Feldebene

Feldverschlüsselung auf Clientebene ist ein Treiberfeature und mit der API für MongoDB kompatibel. Die explizite Verschlüsselung, in der der Treiber beim Schreiben jedes Feld explizit verschlüsselt, wird unterstützt. Automatische Verschlüsselung wird nicht unterstützt. Explizite Entschlüsselung und automatische Entschlüsselung werden unterstützt.

mongocryptdsollte nicht ausgeführt werden, weil sie zur Ausführung der unterstützten Vorgänge nicht erforderlich ist.

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 zudem erweitert, um die globale Replikation mit geringer Latenz zu erreichen. Azure Cosmos DB unterstützt keine manuellen Replikationsbefehle.

Wiederholbare Schreibvorgänge

Das Feature „Wiederholbare Schreibvorgänge“ ermöglicht es MongoDB-Treibern, bestimmte Schreibvorgänge automatisch zu wiederholen. Das Feature führt zu strengeren Anforderungen bei bestimmten Vorgängen, die den Anforderungen des MongoDB-Protokolls entsprechen. Wenn dieses Feature aktiviert ist, muss bei Aktualisierungsvorgängen, einschließlich Löschvorgängen, in Shardsammlungen der Shardschlüssel in den Abfragefilter oder die Updateanweisung eingeschlossen werden.

So gilt bei einer Shardsammlung, die über den Schlüssel "country" konfiguriert wird: Zum Löschen aller Dokumente mit dem Feld "city" = "NYC" muss die Anwendung den Vorgang für alle Werte des Shardschlüssels ("country") ausführen, wenn das Feature „Wiederholbare Schreibvorgänge“ aktiviert ist.

  • db.coll.deleteMany({"country": "USA", "city": "NYC"}) - Erfolgreich
  • db.coll.deleteMany({"city": "NYC"}) – Fehlgeschlagen mit der Fehlermeldung ShardKeyNotFound(61)

Hinweis

Wiederholbare Schreibvorgänge unterstützen derzeit keine ungeordneten Massenschreibvorgä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 auf der Registerkarte Features im Azure-Portal aktiviert werden.

Sharding (Horizontales Partitionieren)

Azure Cosmos DB unterstützt das automatische, serverseitige Sharding. Es verwaltet die Erstellung, die Platzierung und der Ausgleich von Shards automatisch. Azure Cosmos DB unterstützt keine manuellen Shardingbefehle, was bedeutet, dass Sie keine Befehle wie addShard, balancerStartund moveChunkaufrufen 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

Azure Cosmos DB unterstützt eine Gültigkeitsdauer (Time-to-live, TTL) basierend auf dem Zeitstempel des Dokuments. Sie können TTL für eine Sammlung im Azure-Portal aktivieren.

Benutzerdefinierte TTL

Dieses Feature bietet die Möglichkeit, eine benutzerdefinierte TTL für ein beliebiges Feld in einer Sammlung festzulegen.

Sammlung mit aktivierter TTL für ein Feld:

  • Zulässige Typen sind der BSON-Datentyp und numerische Typen (integer, long oder double), die als Unix-Millisekundenzeitstempel interpretiert werden, um den Ablauf zu bestimmen.

  • Wenn es sich bei dem TTL-Feld um ein Array handelt, wird das kleinste Element des Arrays, das einen zulässigen Typ aufweist, für den Dokumentablauf berücksichtigt.

  • Wenn das TTL-Feld in einem Dokument fehlt, läuft das Dokument nicht ab.

  • Wenn das TTL-Feld keinen zulässigen Typ aufweist, läuft das Dokument nicht ab.

Einschränkungen einer benutzerdefinierten TTL

  • Es kann nur für ein Feld in einer Sammlung eine TTL festgelegt sein.

  • Wenn ein Feld mit einer benutzerdefinierten TTL festgelegt ist, kann das \_ts-Feld nicht für den Dokumentablauf verwendet werden.

  • Sie können das \_ts Feld nicht zusätzlich verwenden.

Konfiguration

Sie können eine benutzerdefinierte TTL aktivieren, indem Sie die EnableTtlOnCustomPath Funktion für das Konto aktualisieren. Erfahren Sie, wie Sie die Funktionen konfigurieren.

Einrichten der TTL

Führen Sie diesen Befehl aus, um die TTL einzurichten: db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})

Transaktionen

Transaktionen mit mehreren Dokumenten werden in einer Sammlung ohne Shards unterstützt. Transaktionen mit mehreren Dokumenten werden sammlungsübergreifend oder in Sammlungen mit Shards nicht unterstützt. Das Timeout für Transaktionen ist auf fünf Sekunden festgelegt.

Verwalten von Benutzern und Rollen

Azure Cosmos DB unterstützt noch nicht Benutzer und Rollen. Azure Cosmos DB unterstützt jedoch die rollenbasierte Zugriffssteuerung in Azure (Azure Role-Based Access Control, Azure RBAC) sowie Lese-/Schreibkennwörter/-schlüssel und Schreibschutzkennwörter/-schlüssel, die über das Azure-Portal (Seite Verbindungszeichenfolge) abgerufen werden können.

Schreiben von Bedenken

Einige Anwendungen unterstützen eine Schreibbestätigung. Diese gibt die Anzahl der Antworten an, 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.

Nächste Schritte