Azure Cosmos DB for MongoDB (Version 3.2): unterstützte Features und Syntax

GILT FÜR: MongoDB

Azure Cosmos DB ist ein global verteilter Datenbankdienst von Microsoft mit mehreren Modellen. Sie können mit der API für Azure Cosmos DB for MongoDB über einen der Open-Source-MongoDB-Clienttreiber kommunizieren. Die API für Azure Cosmos DB for MongoDB ermöglicht die Verwendung vorhandener Clienttreiber über das Wire Protocol von MongoDB.

Wenn Sie Azure Cosmos DB for MongoDB verwenden, können Sie die Vorteile der vertrauten MongoDB mit allen Unternehmensfunktionen von Azure Cosmos DB kombinieren. Hierzu gehören: globale Verteilung, automatisches Sharding, Gewährleistung der Verfügbarkeit und Latenz, automatische Indizierung der einzelnen Felder, Verschlüsselung ruhender Daten, Sicherungen und vieles mehr.

Hinweis

Für Version 3.2 der Azure Cosmos DB-API für MongoDB gibt es zurzeit 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 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 sind unten 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. Im Anschluss 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:

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, die unterstützte Serverbefehle nutzen, sind mit Azure Cosmos DB for MongoDB kompatibel.

Befehle für Abfrage- und Schreibvorgänge

  • delete
  • find
  • findAndModify
  • getLastError
  • getMore
  • insert
  • update

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

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

Operator Beispiel Hinweise
$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 Hinweise
cursor.sort() 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 rollenbasierte Zugriffssteuerung in Azure (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

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.

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 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.

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

Nächste Schritte

  • Informieren Sie sich, wie Studio 3T bei Azure Cosmos DB for MongoDB verwendet wird.
  • Informieren Sie sich, wie Robo 3T bei Azure Cosmos DB for MongoDB verwendet wird.
  • Untersuchen Sie MongoDB-Beispiele mit Azure Cosmos DB for MongoDB.