Azure Cosmos DB-API für MongoDB (Version 3.2): unterstützte Features und Syntax

GILT FÜR: Azure Cosmos DB-API für MongoDB

Azure Cosmos DB ist ein global verteilter Datenbankdienst von Microsoft mit mehreren Modellen. Sie können mit der API für MongoDB von Azure Cosmos DB über einen der Open-Source-MongoDB-Clienttreiber kommunizieren. (Diese Treiber finden Sie hier). Die API für MongoDB von Azure Cosmos DB ermöglicht die Verwendung vorhandener Clienttreiber durch Nutzung des Wire Protocol von MongoDB.

Mit der API für MongoDB von Azure Cosmos DB können Sie die Vorteile der vertrauten MongoDB mit allen Unternehmensfunktionen von Cosmos DB kombinieren. Hierzu zählen unter anderem globale Verteilung, automatisches Sharding, Gewährleistung der Verfügbarkeit und Latenz, automatische Indizierung der einzelnen Felder, Verschlüsselung ruhender Daten sowie Sicherungen.

Hinweis

Für die Version 3.2 der Cosmos DB-API für MongoDB gibt es aktuell 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 die Azure Cosmos DB-API für 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 MongoDB von Azure Cosmos DB eine Verbindung herstellen können.

Die Azure Cosmos DB-API für MongoDB bietet für qualifizierte Konten zudem eine nahtlose Upgradeerfahrung. Weitere Informationen finden Sie im Upgradehandbuch für MongoDB.

Unterstützung der Abfragesprache

Die API für MongoDB von Azure Cosmos DB 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

Die API für MongoDB von Azure Cosmos DB 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, für die unterstützte Serverbefehle genutzt werden, sind mit der API für MongoDB von Azure Cosmos DB kompatibel.

Befehle für Abfrage- und Schreibvorgänge

  • delete
  • Suchen
  • findAndModify
  • getLastError
  • getMore
  • insert
  • aktualisieren

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 „|“ eingeschlossen 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

Bei Verwendung des findOneAndUpdate-Vorgangs werden Sortiervorgänge für ein einzelnes Feld unterstützt, Sortiervorgänge für mehrere Felder jedoch nicht.

Andere Operatoren

Operator Beispiel Notizen
$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 Notizen
cursor.sort() cursor.sort({ "Elevation": -1 }) Dokumente ohne Sortierschlüssel werden nicht zurückgegeben.

Eindeutige Indizes

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 Cosmos DB erstellen, indem Sie den Befehl „createIndex“ mit der Einschränkung „unique“ verwenden.

Eindeutige Indizes sind für alle Cosmos-Konten mithilfe der API für MongoDB von Cosmos DB verfügbar.

Gültigkeitsdauer (TTL)

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.

Benutzer- und Rollenverwaltung

Cosmos DB unterstützt noch keine Benutzer und Rollen. 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.

Replikation

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. 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 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. Das bedeutet, dass Sie keine Befehle wie „shardCollection“, „addShard“, „balancerStart“, „moveChunk“ usw. aufrufen müssen. Sie müssen beim Erstellen der Container oder beim Abfragen der Daten nur den Shardschlüssel angeben.

Nächste Schritte

  • Erfahren Sie, wie Sie Studio 3T mit der API für MongoDB von Azure Cosmos DB verwenden.
  • Erfahren Sie, wie Sie Robo 3T mit der API für MongoDB von Azure Cosmos DB verwenden.
  • Untersuchen Sie MongoDB-Beispiele mit der API für MongoDB von Azure Cosmos DB.