Fonctionnalités et syntaxe prises en charge d’Azure Cosmos DB for MongoDB (version 3.2)

S’APPLIQUE À : MongoDB

Azure Cosmos DB est le service de base de données multi-modèle de Microsoft distribué à l’échelle mondiale. Vous pouvez communiquer avec Azure Cosmos DB for MongoDB par le biais de n’importe quel pilote du client open source MongoDB. Azure Cosmos DB for MongoDB permet d’utiliser les pilotes clients existants en adhérant au protocole Wire MongoDB.

À l’aide d’Azure Cosmos DB pour MongoDB, vous pouvez profiter des avantages de MongoDB que vous connaissez déjà, ainsi que de toutes les fonctionnalités d’entreprise fournies par Azure Cosmos DB : distribution globale, partitionnement automatique, garanties de disponibilité et latence, indexation automatique de tous les champs, chiffrement au repos, sauvegardes et bien plus encore.

Notes

La version 3.2 de l’API Cosmos DB pour MongoDB n’a pas de plan actuel pour la fin de vie (EOL). Le préavis minimal pour une fin de vie future est de trois ans.

Prise en charge du protocole

Tous les nouveaux comptes d’Azure Cosmos DB pour MongoDB sont compatibles avec la version 3.6 du serveur MongoDB. Cet article porte sur MongoDB version 3.2. Les opérateurs pris en charge, ainsi que les limitations ou exceptions sont répertoriés ci-dessous. Les pilotes clients comprenant ces protocoles doivent pouvoir se connecter à Azure Cosmos DB for MongoDB.

Azure Cosmos DB pour MongoDB offre également une expérience de mise à niveau transparente pour les comptes éligibles. Pour en savoir plus, consultez le Guide de mise à niveau de la version MongoDB.

Prise en charge du langage de requêtes

Azure Cosmos DB for MongoDB permet la prise en charge complète des constructions de langage de requête MongoDB. Vous trouverez ci-dessous la liste détaillée des opérations, opérateurs, étapes, commandes et options actuellement pris en charge.

Commandes de base de données

Azure Cosmos DB for MongoDB prend en charge les commandes de base de données suivantes :

Notes

Cet article liste uniquement les commandes de serveur prises en charge et exclut les fonctions wrapper côté client. Les fonctions wrapper côté client telles que deleteMany() et updateMany() utilisent en interne les commandes de serveur delete() et update(). Les fonctions utilisant des commandes de serveur prises en charge sont compatibles avec Azure Cosmos DB for MongoDB.

Commandes d’opérations de requête et d’écriture

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

Commandes d’authentification

  • logout
  • authenticate
  • getnonce

Commandes d’administration

  • dropDatabase
  • listCollections
  • drop
  • create
  • filemd5
  • createIndexes
  • listIndexes
  • dropIndexes
  • connectionStatus
  • reIndex

Commandes de diagnostic

  • buildInfo
  • collStats
  • dbStats
  • hostInfo
  • listDatabases
  • whatsmyuri

Pipeline d’agrégation

Commandes d’agrégation

  • aggregate
  • count
  • distinct

Étapes d’agrégation

  • $project
  • $match
  • $limit
  • $skip
  • $unwind
  • $group
  • $sample
  • $sort
  • $lookup
  • $out
  • $count
  • $addFields

Expressions d’agrégation

Expressions booléennes

  • $and
  • $or
  • $not

Expressions SET

  • $setEquals
  • $setIntersection
  • $setUnion
  • $setDifference
  • $setIsSubset
  • $anyElementTrue
  • $allElementsTrue

Expressions de comparaison

  • $cmp
  • $eq
  • $gt
  • $gte
  • $lt
  • $lte
  • $ne

Expressions arithmétiques

  • $abs
  • $add
  • $ceil
  • $divide
  • $exp
  • $floor
  • $ln
  • $log
  • $log10
  • $mod
  • $multiply
  • $pow
  • $sqrt
  • $subtract
  • $trunc

Expressions de chaîne

  • $concat
  • $indexOfBytes
  • $indexOfCP
  • $split
  • $strLenBytes
  • $strLenCP
  • $strcasecmp
  • $substr
  • $substrBytes
  • $substrCP
  • $toLower
  • $toUpper

Expressions de tableau

  • $arrayElemAt
  • $concatArrays
  • $filter
  • $indexOfArray
  • $isArray
  • $range
  • $reverseArray
  • $size
  • $slice
  • $in

Expressions de date

  • $dayOfYear
  • $dayOfMonth
  • $dayOfWeek
  • $year
  • $month
  • $week
  • $hour
  • $minute
  • $second
  • $millisecond
  • $isoDayOfWeek
  • $isoWeek

Expressions conditionnelles

  • $cond
  • $ifNull

Accumulateurs d’agrégation

  • $sum
  • $avg
  • $first
  • $last
  • $max
  • $min
  • $push
  • $addToSet

Opérateurs

Les opérateurs suivants sont pris en charge, voici des exemples correspondant à leur utilisation. L’exemple de document suivant est utilisé pour les requêtes ci-dessous :

{
  "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"
}
Opérateur Exemple
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"} }

Notes

Dans les requêtes $regex, les expressions ancrées à gauche autorisent la recherche d’index. Toutefois, l’utilisation des modificateurs « i » (non sensible à la casse) et « m » (multiligne), provoquent l’analyse de la collection pour toutes les expressions. Quand il est nécessaire d’inclure « $ » ou « | », il est préférable de créer deux requêtes regex (ou plus). Par exemple, étant donné la requête d’origine suivante : find({x:{$regex: /^abc$/}), elle doit être modifiée comme suit : find({x:{$regex: /^abc/, x:{$regex:/^abc$/}}). La première partie utilise l’index pour limiter la recherche aux documents commençant par ^abc et la deuxième partie correspond aux entrées exactes. L’opérateur à barre « | » agit comme une fonction « OR », la requête find({x:{$regex: /^abc|^def/}) correspond aux documents dont le champ « x » comporte une valeur commençant par « abc » ou « def ». Pour utiliser l’index, il est recommandé de diviser la requête en deux requêtes différentes jointes par l’opérateur $or : find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Opérateurs de mise à jour

Opérateurs de mise à jour de champ

  • $inc
  • $mul
  • $rename
  • $setOnInsert
  • $set
  • $unset
  • $min
  • $max
  • $currentDate

Opérateurs de mise à jour de tableau

  • $addToSet
  • $pop
  • $pullAll
  • $pull (Remarque : l’opérateur $pull avec une condition n’est pas pris en charge)
  • $pushAll
  • $push
  • $each
  • $slice
  • $sort
  • $position

Opérateur de mise à jour au niveau du bit

  • $bit

Opérateurs géospatiaux

Opérateur Exemple Prise en charge
$geoWithin { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Oui
$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 ] ] ] } } } } Oui
$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 ] ] ] } } } } Oui
$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Oui
$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 ] ] ] } } } } Oui
$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } Oui
$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Oui
$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } Oui
$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Oui
$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } Oui
$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 ] ] ] } } } } Oui

Trier les opérations

Quand vous utilisez l’opération findOneAndUpdate, les opérations de tri sur un champ unique sont prises en charge, mais les opérations à effectuer sur plusieurs champs ne le sont pas.

Autres opérateurs

Opérateur Exemple Notes
$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 Non pris en charge. Utilisez plutôt $regex.

Opérateurs non pris en charge

Les opérateurs $where et $eval ne sont pas pris en charge par Azure Cosmos DB.

Méthodes

Les méthodes suivantes sont prises en charge :

Méthodes Cursor

Méthode Exemple Notes
cursor.sort() cursor.sort({ "Elevation": -1 }) Les documents sans clé de tri ne sont pas retournées

Index uniques

Azure Cosmos DB indexe tous les champs dans les documents qui sont écrits dans la base de données par défaut. Les index uniques garantissent qu’un champ spécifique ne présente pas de valeurs en double dans tous les documents d’une collection. Cette approche est semblable à la façon dont l’unicité est conservée sur la clé _id par défaut. Vous pouvez créer des index personnalisés dans Azure Cosmos DB à l’aide de la commande createIndex, y compris la contrainte « unique ».

Les index uniques sont disponibles pour tous les comptes Azure Cosmos DB à l’aide d’Azure Cosmos DB pour MongoDB.

Durée de vie (TTL)

Azure Cosmos DB prend uniquement en charge une durée de vie (TTL) au niveau de la collection (_ts) dans la version 3.2. Effectuez une mise à niveau vers les versions 3.6+ pour tirer parti d’autres formes de TTL.

Gestion des rôles et des utilisateurs

Azure Cosmos DB ne prend pas encore en charge les utilisateurs et les rôles. Azure Cosmos DB prend cependant en charge le contrôle d'accès en fonction du rôle Azure (Azure RBAC) et les mots de passe/clés en lecture-écriture et en lecture seule, qui peuvent être obtenus par le biais du Portail Azure (page de la chaîne de connexion).

Réplication

Azure Cosmos DB prend en charge la réplication automatique et native des couches inférieures. Cette logique est prolongée pour obtenir également la réplication globale et à faible latence. Azure Cosmos DB ne prend pas en charge les commandes de réplication manuelle.

Élément Write Concern

Certaines applications utilisent un élément Write Concern, qui indique le nombre de réponses nécessaires au cours d’une opération d’écriture. En raison de la façon dont Azure Cosmos DB gère la réplication en arrière-plan, toutes les écritures atteignent automatiquement le quorum par défaut. Tout élément Write Concern spécifié par le code client est ignoré. Pour en savoir plus, consultez Niveaux de cohérence des données analysables dans Azure Cosmos DB.

Partitionnement

Azure Cosmos DB prend en charge le partitionnement automatique côté serveur. Il gère automatiquement la création, le positionnement et l’équilibrage de partitions. Azure Cosmos DB ne prend pas en charge les commandes d’instructions de partitionnement manuelles, ce qui signifie que vous n’avez pas à appeler les commandes telles que shardCollection, addShard, balancerStart, moveChunk, etc. Il vous suffit de spécifier la clé de partitionnement lors de la création des conteneurs ou de l’interrogation des données.

Étapes suivantes