Azure Cosmos DB for MongoDB (version 3.6) : fonctionnalités et syntaxe prises en charge
Article
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 for 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, comme la distribution mondiale, le partitionnement automatique, les garanties de disponibilité et de latence, le chiffrement au repos, les sauvegardes et bien d’autres encore.
Notes
La version 3.6 d’Azure Cosmos DB for 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
Azure Cosmos DB for MongoDB est compatible avec la version 3.6 du serveur MongoDB par défaut pour les nouveaux comptes. 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. Quand vous créez des comptes d’API Azure Cosmos DB pour MongoDB, le point de terminaison de la version 3.6 du compte est au format *.mongo.cosmos.azure.com, tandis que celui de la version 3.2 du compte est au format *.documents.azure.com.
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. Dans les sections suivantes, vous trouverez la liste détaillée des opérations de serveur, des opérateurs, des étapes, des commandes et des options actuellement pris en charge par Azure Cosmos DB.
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 de base de données
Azure Cosmos DB for MongoDB prend en charge les commandes de base de données suivantes :
$lookup ne prend pas encore en charge la fonctionnalité de sous-requêtes non corrélées introduite dans la version serveur 3.6. Vous recevez une erreur avec un message contenant let is not supported si vous tentez d’utiliser l’opérateur $lookup avec les champs let et pipeline.
Expressions booléennes
Commande
Prise en charge
and
Oui
not
Oui
or
Oui
Expressions SET
Commande
Prise en charge
setEquals
Oui
setIntersection
Oui
setUnion
Oui
setDifference
Oui
setIsSubset
Oui
anyElementTrue
Oui
allElementsTrue
Oui
Expressions de comparaison
Notes
L’API pour MongoDB ne prend pas en charge les expressions de comparaison avec un littéral de tableau dans la requête.
Commande
Prise en charge
cmp
Oui
eq
Oui
gt
Oui
gte
Oui
lt
Oui
lte
Oui
ne
Oui
in
Oui
nin
Oui
Expressions arithmétiques
Commande
Prise en charge
abs
Oui
add
Oui
ceil
Oui
divide
Oui
exp
Oui
floor
Oui
ln
Oui
log
Oui
log10
Oui
mod
Oui
multiply
Oui
pow
Oui
sqrt
Oui
subtract
Oui
trunc
Oui
Expressions de chaîne
Commande
Prise en charge
concat
Oui
indexOfBytes
Oui
indexOfCP
Oui
split
Oui
strLenBytes
Oui
strLenCP
Oui
strcasecmp
Oui
substr
Oui
substrBytes
Oui
substrCP
Oui
toLower
Oui
toUpper
Oui
Opérateur de recherche de texte
Commande
Prise en charge
meta
Non
Expressions de tableau
Commande
Prise en charge
arrayElemAt
Oui
arrayToObject
Oui
concatArrays
Oui
filter
Oui
indexOfArray
Oui
isArray
Oui
objectToArray
Oui
range
Oui
reverseArray
Oui
reduce
Oui
size
Oui
slice
Oui
zip
Oui
in
Oui
Opérateurs de variable
Commande
Prise en charge
map
Oui
let
Oui
Variables système
Commande
Prise en charge
$$CURRENT
Oui
$$DESCEND
Oui
$$KEEP
Oui
$$PRUNE
Oui
$$REMOVE
Oui
$$ROOT
Oui
Opérateur littéral
Commande
Prise en charge
literal
Oui
Expressions de date
Commande
Prise en charge
dayOfYear
Oui
dayOfMonth
Oui
dayOfWeek
Oui
year
Oui
month
Oui
week
Oui
hour
Oui
minute
Oui
second
Oui
millisecond
Oui
dateToString
Oui
isoDayOfWeek
Oui
isoWeek
Oui
dateFromParts
Oui
dateToParts
Oui
dateFromString
Oui
isoWeekYear
Oui
Expressions conditionnelles
Commande
Prise en charge
cond
Oui
ifNull
Oui
switch
Oui
Opérateur de type de données
Commande
Prise en charge
type
Oui
Expressions d’accumulation
Commande
Prise en charge
sum
Oui
avg
Oui
first
Oui
last
Oui
max
Oui
min
Oui
push
Oui
addToSet
Oui
stdDevPop
Oui
stdDevSamp
Oui
Opérateur Merge
Commande
Prise en charge
mergeObjects
Oui
Types de données
Commande
Prise en charge
Double
Oui
String
Oui
Object
Oui
Array
Oui
Binary Data
Oui
ObjectId
Oui
Boolean
Oui
Date
Oui
Null
Oui
32-bit Integer (int)
Oui
Timestamp
Oui
64-bit Integer (long)
Oui
MinKey
Oui
MaxKey
Oui
Decimal128
Oui
Regular Expression
Oui
JavaScript
Oui
JavaScript (with scope)
Oui
Undefined
Oui
Index et propriétés d’index
Index
Commande
Prise en charge
Single Field Index
Oui
Compound Index
Oui
Multikey Index
Oui
Text Index
No
2dsphere
Oui
2d Index
No
Hashed Index
Non
Propriétés d’index
Commande
Prise en charge
TTL
Oui
Unique
Oui
Partial
No
Case Insensitive
Non
Sparse
Non
Background
Oui
Opérateurs
Opérateurs logiques
Commande
Prise en charge
or
Oui
and
Oui
not
Oui
nor
Oui
Opérateurs d’élément
Commande
Prise en charge
exists
Oui
type
Oui
Opérateurs de requête d’évaluation
Commande
Prise en charge
expr
Oui
jsonSchema
No
mod
Oui
regex
Oui
text
Non (Non pris en charge. Utilisez plutôt $regex.)
where
Non
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 tableau
Commande
Prise en charge
all
Oui
elemMatch
Oui
size
Oui
Opérateur de commentaire
Commande
Prise en charge
comment
Oui
Opérateurs de projection
Commande
Prise en charge
elemMatch
Oui
meta
No
slice
Oui
Opérateurs de mise à jour
Opérateurs de mise à jour de champ
Commande
Prise en charge
inc
Oui
mul
Oui
rename
Oui
setOnInsert
Oui
set
Oui
unset
Oui
min
Oui
max
Oui
currentDate
Oui
Opérateurs de mise à jour de tableau
Commande
Prise en charge
$
Oui
$[]
Oui
$[\<identifier\>]
Oui
addToSet
Oui
pop
Oui
pullAll
Oui
pull
Oui
push
Oui
pushAll
Oui
Modificateurs de mise à jour
Commande
Prise en charge
each
Oui
slice
Oui
sort
Oui
position
Oui
Opérateur de mise à jour au niveau du bit
Commande
Prise en charge
bit
Oui
bitsAllSet
No
bitsAnySet
Non
bitsAllClear
Non
bitsAnyClear
Non
Opérateurs géospatiaux
Opérateur
Prise en charge
$geoWithin
Oui
$geoIntersects
Oui
$near
Oui
$nearSphere
Oui
$geometry
Oui
$minDistance
Oui
$maxDistance
Oui
$center
No
$centerSphere
Non
$box
Non
$polygon
Non
Opérations de tri
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.
Indexation
L’API pour MongoDB prend en charge différents index pour permettre le tri sur plusieurs champs, améliorer les performances des requêtes et garantir l’unicité.
GridFS
Azure Cosmos DB prend en charge GridFS par le biais de n’importe quel pilote MongoDB compatible GridFS.
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.
Écritures renouvelables
Azure Cosmos DB ne prend pas en charge les écritures renouvelables. Les pilotes clients doivent ajouter retryWrites=false à leur chaîne de connexion.
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 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.
Sessions
Azure Cosmos DB ne prend pas encore en charge les commandes de sessions côté serveur.
Durée de vie (TTL)
Azure Cosmos DB prend en charge une durée de vie (TTL) en fonction du timestamp du document. La TTL peut être activée pour les collections à partir du portail Azure.
Gestion des rôles et des utilisateurs
Azure Cosmos DB ne prend pas encore en charge les utilisateurs et les rôles. Toutefois, il prend en charge le contrôle d’accès en fonction du rôle Azure (Azure RBAC) et les mots de passe ou clés en lecture-écriture et en lecture seule, qui peuvent être obtenus via le volet de chaîne de connexion dans le portail Azure.
É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 du mode de gestion de la réplication par Azure Cosmos DB, toutes les écritures ont automatiquement un quorum majoritaire par défaut quand la cohérence forte est utilisée. Tout élément Write Concern spécifié par le code client est ignoré. Pour en savoir plus, consultez l’article Utilisation des niveaux de cohérence pour optimiser la disponibilité et les performances.