Azure Cosmos DB for MongoDB (version serveur 4.0) : 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.
Prise en charge du protocole
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 Azure Cosmos DB for MongoDB, le point de terminaison des versions 3.6 et ultérieures des comptes est au format *.mongo.cosmos.azure.com, tandis que celui de la version 3.2 des comptes est au format *.documents.azure.com.
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.
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 :
$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 de conversion
Commande
Prise en charge
convert
Oui
toBool
Oui
toDate
Oui
toDecimal
Oui
toDouble
Oui
toInt
Oui
toLong
Oui
toObjectId
Oui
toString
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
ltrim
Oui
rtrim
Oui
trim
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
Azure Cosmos DB for MongoDB prend en charge les documents encodés au format BSON MongoDB. La version 4.0 de l’API permet une meilleure utilisation interne de ce format pour améliorer les performances et réduire les coûts. Les documents écrits ou mis à jour par le biais d’un point de terminaison exécutant la version 4.0 ou ultérieure profitent de l’optimisation.
Dans un scénario de mise à niveau, les documents qui ont été écrits avant la mise à niveau vers la version 4.0 ou ultérieure ne bénéficient pas de l’amélioration des performances ; pour cela, ils doivent être mis à niveau par une opération d’écriture effectuée via le point de terminaison 4.0 ou version ultérieure.
La prise en charge des documents de 16 Mo augmente la limite de taille de vos documents de 2 Mo à 16 Mo. Cette limite s’applique uniquement aux collections créées une fois cette fonctionnalité activée. Une fois cette fonctionnalité activée pour votre compte de base de données, elle ne peut pas être désactivée.
Nous vous recommandons d’activer la nouvelle tentative côté serveur et d’éviter les index génériques pour garantir que les requêtes avec des documents plus volumineux réussissent. Si nécessaire, l’élévation de vos RU de base de données/collection peut également aider à améliorer les performances.
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 avec l’API MongoDB version 4.0, les opérations de tri sur un seul champ et plusieurs champs sont prises en charge. Les opérations de tri sur plusieurs champs limitaient des protocoles filaires précédents.
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 Mongo 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
Les écritures renouvelables permettent aux pilotes MongoDB de réessayer automatiquement certaines opérations d’écriture en cas d’échec. Cependant, des exigences plus strictes (celles du protocole MongoDB) seront appliquées à certaines opérations. Quand cette fonctionnalité est activée, les opérations de mise à jour (y compris les suppressions) effectuées dans les collections partitionnées nécessitent que la clé de partition soit incluse dans le filtre de requête ou l’instruction de mise à jour.
Par exemple, avec une collection partitionnée (partitionnée avec la clé « country») : pour supprimer tous les documents pour lesquels le champ city = "NYC", l’application doit exécuter l’opération pour toutes les valeurs de clé de partition (pays) si les écritures renouvelables sont activées.
db.coll.deleteMany({"city": "NYC"}) - Échoue avec l’erreur ShardKeyNotFound(61)
Notes
Les écritures pouvant faire l’objet d’une nouvelle tentative ne prennent pas en charge les écritures non ordonnées en bloc pour le moment. Si vous souhaitez effectuer des écritures en bloc en activant les écritures pouvant faire l’objet d’une nouvelle tentative, effectuez des écritures ordonnées en bloc.
Pour activer la fonctionnalité, ajoutez la fonctionnalité EnableMongoRetryableWrites à votre compte de base de données. Cette fonctionnalité peut également être activée dans l’onglet des fonctionnalités du Portail Azure.
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.
Transactions
Les transactions multidocuments sont prises en charge dans une collection non partitionnée. Les transactions multidocuments ne sont pas prises en charge sur plusieurs collections ou au sein de collections partitionnées. Le délai d’expiration des transactions est fixé à cinq secondes.
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).
É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.
Explorez les exemples MongoDB avec Azure Cosmos DB for MongoDB.
Vous tentez d’effectuer une planification de la capacité pour une migration vers Azure Cosmos DB ? Vous pouvez utiliser les informations sur votre cluster de bases de données existant pour la planification de la capacité.