Freigeben über


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

Mit Azure Cosmos DB für MongoDB 4.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 4.2 beschrieben.

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

Unterstützt
change streams ✅ Ja
delete ✅ Ja
eval ✖️ Nein
find ✅ Ja
findAndModify ✅ Ja
getLastError ✅ Ja
getMore ✅ Ja
getPrevError ✖️ Nein
insert ✅ Ja
parallelCollectionScan ✖️ Nein
resetError ✖️ Nein
update ✅ Ja

Transaktionsbefehle

Hinweis

Transaktionen mit mehreren Dokumenten werden nur innerhalb einer einzelnen nichthardierten Auflistung unterstützt. Cross-Collection- und cross-shard multi-document transactions aren't yet supported in the API for MongoDB.

Unterstützt
abortTransaction ✅ Ja
commitTransaction ✅ Ja

Authentifizierungsbefehle

Unterstützt
authenticate ✅ Ja
getnonce ✅ Ja
logout ✅ Ja

Verwaltungsbefehle

Unterstützt
cloneCollectionAsCapped ✖️ Nein
collMod ✖️ Nein
connectionStatus ✖️ Nein
convertToCapped ✖️ Nein
copydb ✖️ Nein
create ✅ Ja
createIndexes ✅ Ja
currentOp ✅ Ja
drop ✅ Ja
dropDatabase ✅ Ja
dropIndexes ✅ Ja
filemd5 ✅ Ja
killCursors ✅ Ja
killOp ✖️ Nein
listCollections ✅ Ja
listDatabases ✅ Ja
listIndexes ✅ Ja
reIndex ✅ Ja
renameCollection ✖️ Nein

Diagnosebefehle

Unterstützt
buildInfo ✅ Ja
collStats ✅ Ja
connPoolStats ✖️ Nein
connectionStatus ✖️ Nein
dataSize ✖️ Nein
dbHash ✖️ Nein
dbStats ✅ Ja
explain ✅ Ja
features ✖️ Nein
hello ✅ Ja
hostInfo ✅ Ja
listDatabases ✅ Ja
listCommands ✖️ Nein
profiler ✖️ Nein
serverStatus ✖️ Nein
top ✖️ Nein
whatsmyuri ✅ Ja

Aggregationspipeline

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

Aggregationsbefehle

Unterstützt
aggregate ✅ Ja
count ✅ Ja
distinct ✅ Ja
mapReduce ✖️ Nein

Aggregationsphasen

Unterstützt
addFields ✅ Ja
bucket ✖️ Nein
bucketAuto ✖️ Nein
changeStream ✅ Ja
collStats ✖️ Nein
count ✅ Ja
currentOp ✖️ Nein
facet ✅ Ja
geoNear ✅ Ja
graphLookup ✖️ Nein
group ✅ Ja
indexStats ✖️ Nein
limit ✅ Ja
listLocalSessions ✖️ Nein
listSessions ✖️ Nein
lookup ❓Teilweise
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

Die $lookup Aggregation unterstützt nicht das feature für nicht korrelierte Unterabfragen , das in Der Serverversion 3.6 eingeführt wurde. Die Verwendung des $lookup Operators mit den let Feldern führt pipeline zu einer Fehlermeldung, die angibt, dass "let nicht unterstützt wird."

Boolesche Ausdrücke

Unterstützt
and ✅ Ja
not ✅ Ja
or ✅ Ja

Konvertierungsausdrücke

Unterstützt
convert ✅ Ja
toBool ✅ Ja
toDate ✅ Ja
toDecimal ✅ Ja
toDouble ✅ Ja
toInt ✅ Ja
toLong ✅ Ja
toObjectId ✅ Ja
toString ✅ Ja

Set-Ausdrücke

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 ein Arrayliteral in der Abfrage enthalten.

Unterstützt
cmp ✅ Ja
eq ✅ Ja
gt ✅ Ja
gte ✅ Ja
lt ✅ Ja
lte ✅ Ja
ne ✅ Ja
in ✅ Ja
nin ✅ Ja

Arithmetische Ausdrücke

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

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

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

Unterstützt
meta ✖️ Nein

Arrayausdrücke

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

Unterstützt
map ✅ Ja
let ✅ Ja

Systemvariablen

Unterstützt
$$CLUSTERTIME ✅ Ja
$$CURRENT ✅ Ja
$$DESCEND ✅ Ja
$$KEEP ✅ Ja
$$NOW ✅ Ja
$$PRUNE ✅ Ja
$$REMOVE ✅ Ja
$$ROOT ✅ Ja

Literaloperator

Unterstützt
literal ✅ Ja

Datumsausdrücke

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

Unterstützt
cond ✅ Ja
ifNull ✅ Ja
switch ✅ Ja

Datentypoperator

Unterstützt
type ✅ Ja

Akkumulatorausdrücke

Unterstützt
sum ✅ Ja
avg ✅ Ja
first ✅ Ja
last ✅ Ja
max ✅ Ja
min ✅ Ja
push ✅ Ja
addToSet ✅ Ja
stdDevPop ✅ Ja
stdDevSamp ✅ Ja

Zusammenführungsoperator

Unterstützt
mergeObjects ✅ Ja

Datentypen

Azure Cosmos DB für MongoDB unterstützt Dokumente, die im Binär-JSON-Format mongoDB codiert sind. 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 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.

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.

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

Unterstützt
Single Field Index ✅ Ja
Compound Index ✅ Ja
Multikey Index ✅ Ja
Text Index ✖️ Nein
2dsphere ✅ Ja
2d Index ✖️ Nein
Hashed Index ✖️ Nein

Indexeigenschaften

Unterstützt
TTL ✅ Ja
Unique ✅ Ja
Partial ❓Teilweise
Case Insensitive ✖️ Nein
Sparse ✖️ Nein
Background ✅ Ja

Tipp

Partial wird nur für eindeutige Indizes unterstützt.

Operatoren

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

Logische Operatoren

Unterstützt
or ✅ Ja
and ✅ Ja
not ✅ Ja
nor ✅ Ja

Elementoperatoren

Unterstützt
exists ✅ Ja
type ✅ Ja

Abfrageoperatoren für die Auswertung

Unterstützt
expr ✅ Ja
jsonSchema ✖️ Nein
mod ✅ Ja
regex ✅ Ja
text ✖️ Nein
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 or 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 separate Abfragen, und verbinden Sie sie mit dem $or Operator: find({$or: [{x: {$regex: /^abc/}}, {x: {$regex: /^def/}}]})

Tipp

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

Arrayoperatoren

Unterstützt
all ✅ Ja
elemMatch ✅ Ja
size ✅ Ja

Kommentaroperator

Unterstützt
comment ✅ Ja

Projektionsoperatoren

Unterstützt
elemMatch ✅ Ja
meta ✖️ Nein
slice ✅ Ja

Aktualisierungsoperatoren

Operatoren für die Feldaktualisierung

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

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

Aktualisierungsmodifizierer

Unterstützt
each ✅ Ja
slice ✅ Ja
sort ✅ Ja
position ✅ Ja

Bitweiser Updateoperator

Unterstützt
bit ✅ Ja
bitsAllSet ✖️ Nein
bitsAnySet ✖️ Nein
bitsAllClear ✖️ Nein
bitsAnyClear ✖️ Nein

Räumliche Operatoren

Unterstützt
$geoWithin ✅ Ja
$geoIntersects ✅ Ja
$near ✅ Ja
$nearSphere ✅ Ja
$geometry ✅ Ja
$minDistance ✅ Ja
$maxDistance ✅ Ja
$center ✖️ Nein
$centerSphere ✖️ Nein
$box ✖️ Nein
$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

Die Feldverschlüsselung auf Clientebene ist ein Treiberfeature und funktioniert mit Azure Cosmos DB für MongoDB. Explizite Verschlüsselung, bei der der Treiber jedes Feld während Schreibvorgängen 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.

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"}) - Erfolgreich mit Nachricht Success
  • db.coll.deleteMany({"city": "NYC"}) - Fehler mit Fehler ShardKeyNotFound(61)

Hinweis

Das Feature für wiederholungsfähige Schreibvorgänge unterstützt zurzeit 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 bietet ein Time to Live(TTL)-Feature basierend auf dem Zeitstempel des Dokuments. Aktivieren Sie TTL für eine Sammlung im Azure-Portal.

Benutzerdefinierte TTL

Mit diesem Feature können Sie einen benutzerdefinierten TTL-Wert für ein einzelnes Feld in einer Auflistung angeben. Dokumente laufen basierend auf dem Wert dieses Felds ab.

Sammlung mit aktivierter TTL für ein Feld:

  • Zulässige Typen sind der binäre JSON-Datentyp (BSON) und numerische Typen (integer, long oder double), die als Unix Millisekunden-Zeitstempel 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 und Lese-/Schreibzugriff und schreibgeschützte Kennwörter und Schlüssel, die über das Azure-Portal abgerufen werden können (auf der Seite "Verbindungszeichenfolgen ").

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. Azure Cosmos DB ignoriert alle vom Clientcode angegebenen Schreibbedenken. Weitere Informationen finden Sie unter Verwenden von Konsistenzebenen zum Maximieren der Verfügbarkeit und Leistung.