Azure Cosmos DB for MongoDB (version serveur 4.2) : fonctionnalités et syntaxe prises en charge
S’APPLIQUE À : MongoDB
Azure Cosmos DB est le service de base de données multimodèle de Microsoft distribué à l’échelle mondiale. Azure Cosmos DB propose plusieurs API de base de données. Vous pouvez communiquer avec Azure Cosmos DB for MongoDB en utilisant n’importe quel pilote client open source MongoDB. Azure Cosmos DB for MongoDB prend en charge l’utilisation des pilotes clients existants en adhérant au protocole filaire (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 de protocole
Les opérateurs pris en charge, ainsi que les limitations ou exceptions sont répertoriées dans cet article. 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 répertorie 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 qui utilisent 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 dans les sections 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.
Commandes d’opérations de requête et d’écriture
Commande | Prise en charge |
---|---|
change streams |
Oui |
delete |
Oui |
eval |
No |
find |
Oui |
findAndModify |
Oui |
getLastError |
Oui |
getMore |
Oui |
getPrevError |
No |
insert |
Oui |
parallelCollectionScan |
No |
resetError |
Non |
update |
Oui |
Commandes de transaction
Notes
Les transactions multidocuments sont uniquement prises en charge dans une seule collection non partitionnée. Les transactions multidocuments Cross-collection et Cross-partition ne sont pas encore prises en charge dans l’API pour MongoDB.
Commande | Prise en charge |
---|---|
abortTransaction |
Oui |
commitTransaction |
Oui |
Commandes d’authentification
Commande | Prise en charge |
---|---|
authenticate |
Oui |
getnonce |
Oui |
logout |
Oui |
Commandes d’administration
Commande | Prise en charge |
---|---|
cloneCollectionAsCapped |
Non |
collMod |
Non |
connectionStatus |
Non |
convertToCapped |
Non |
copydb |
Non |
create |
Oui |
createIndexes |
Oui |
currentOp |
Oui |
drop |
Oui |
dropDatabase |
Oui |
dropIndexes |
Oui |
filemd5 |
Oui |
killCursors |
Oui |
killOp |
No |
listCollections |
Oui |
listDatabases |
Oui |
listIndexes |
Oui |
reIndex |
Oui |
renameCollection |
Non |
Commandes de diagnostic
Commande | Prise en charge |
---|---|
buildInfo |
Oui |
collStats |
Oui |
connPoolStats |
No |
connectionStatus |
Non |
dataSize |
Non |
dbHash |
Non |
dbStats |
Oui |
explain |
Oui |
features |
No |
hostInfo |
Oui |
listDatabases |
Oui |
listCommands |
No |
profiler |
Non |
serverStatus |
Non |
top |
Non |
whatsmyuri |
Oui |
Pipeline d’agrégation
Azure Cosmos DB for MongoDB prend en charge les commandes d’agrégation suivantes.
Commandes d’agrégation
Commande | Prise en charge |
---|---|
aggregate |
Oui |
count |
Oui |
distinct |
Oui |
mapReduce |
Non |
Étapes d’agrégation
Commande | Prise en charge |
---|---|
addFields |
Oui |
bucket |
No |
bucketAuto |
Non |
changeStream |
Oui |
collStats |
No |
count |
Oui |
currentOp |
No |
facet |
Oui |
geoNear |
Oui |
graphLookup |
No |
group |
Oui |
indexStats |
No |
limit |
Oui |
listLocalSessions |
No |
listSessions |
Non |
lookup |
Partiel |
match |
Oui |
merge |
Oui |
out |
Oui |
planCacheStats |
Oui |
project |
Oui |
redact |
Oui |
regexFind |
Oui |
regexFindAll |
Oui |
regexMatch |
Oui |
replaceRoot |
Oui |
replaceWith |
Oui |
sample |
Oui |
set |
Oui |
skip |
Oui |
sort |
Oui |
sortByCount |
Oui |
unset |
Oui |
unwind |
Oui |
Notes
L’agrégation $lookup
ne prend pas encore en charge la fonctionnalité de sous-requêtes non corrélées introduite dans la version serveur 3.6. Si vous essayez d’utiliser l’opérateur $lookup
avec les champs let
et pipeline
, un message d’erreur indiquant que let
n’est pas pris en charge s’affiche.
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 dont la requête contient un littéral de tableau.
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 |
round |
Oui |
sqrt |
Oui |
subtract |
Oui |
trunc |
Oui |
Expressions trigonométriques
Commande | Prise en charge |
---|---|
acos |
Oui |
acosh |
Oui |
asin |
Oui |
asinh |
Oui |
atan |
Oui |
atan2 |
Oui |
atanh |
Oui |
cos |
Oui |
cosh |
Oui |
degreesToRadians |
Oui |
radiansToDegrees |
Oui |
sin |
Oui |
sinh |
Oui |
tan |
Oui |
tanh |
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 |
---|---|
$$CLUSTERTIME |
Oui |
$$CURRENT |
Oui |
$$DESCEND |
Oui |
$$KEEP |
Oui |
$$NOW |
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. Les versions 4.0 et ultérieures (4.0+) améliorent l’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+ bénéficient de cette optimisation.
Dans un scénario de mise à niveau, les documents qui ont été écrits avant la mise à niveau vers la version 4.0+ 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+.
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 après l’activation de cette fonctionnalité. Quand cette fonctionnalité est activée pour votre compte de base de données, elle ne peut pas être désactivée.
Pour activer la prise en charge des documents de 16 Mo, modifiez le paramètre sous l’onglet Fonctionnalités de la ressource dans le portail Azure ou ajoutez la fonctionnalité EnableMongo16MBDocumentSupport
par programme.
Nous vous recommandons d’activer la nouvelle tentative côté serveur et d’éviter d’utiliser des index génériques pour vous assurer que les requêtes dans les documents plus volumineux aboutissent. L’augmentation des unités de requête de base de données ou de collection peut également 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
Azure Cosmos DB for MongoDB prend en charge les commandes et propriétés d’index suivants.
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 |
Prise en charge uniquement pour les index uniques |
Case Insensitive |
Non |
Sparse |
Non |
Background |
Oui |
Opérateurs
Azure Cosmos DB for MongoDB prend en charge les opérateurs suivants.
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 prise 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), provoque l’analyse de la collection dans 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, remplacez la requête d’origine suivante :
find({x:{$regex: /^abc$/})
Par cette requête :
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
La première partie de la requête modifiée utilise l’index pour restreindre la recherche aux documents qui commencent par ^abc
. La deuxième partie de la requête correspond aux entrées exactes. L’opérateur de barre (|
) fait office de fonction « ou ». 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, nous vous recommandons de diviser la requête en deux requêtes différentes qui sont 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. Les opérations de tri sur plusieurs champs ne sont toutefois pas prises en charge.
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é.
Chiffrement au niveau du champ côté client
Le chiffrement de champ au niveau du client est une fonctionnalité de pilote qui est compatible avec l’API pour MongoDB. Le chiffrement explicite, selon lequel le pilote chiffre explicitement chaque champ au moment de l’écriture, est pris en charge. Le chiffrement automatique n’est pas pris en charge. Le déchiffrement explicite et le déchiffrement automatique sont pris en charge.
L’opération mongocryptd
ne doit pas être exécutée, car elle n’est pas nécessaire pour effectuer les opérations prises en charge.
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 également étendue pour obtenir la réplication mondiale et à faible latence. Azure Cosmos DB ne prend pas en charge les commandes de réplication manuelle.
Écritures renouvelables
La fonctionnalité d’écritures renouvelables permet aux pilotes MongoDB de réessayer automatiquement certaines opérations d’écriture. La fonctionnalité entraîne des exigences plus strictes pour certaines opérations, qui correspondent aux exigences du protocole MongoDB. 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 avec la clé "country"
, pour supprimer tous les documents qui contiennent le champ "city" = "NYC"
, l’application doit exécuter l’opération pour toutes les valeurs de clé de partition ("country"
) si la fonctionnalité d’écritures renouvelables est activée.
db.coll.deleteMany({"country": "USA", "city": "NYC"})
- Réussitedb.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 renouvelables, 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 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 de partitionnement manuel ; vous ne devez dès lors pas appeler de commandes telles que addShard
, balancerStart
et moveChunk
. Vous ne devez spécifier la clé de partition que 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
Azure Cosmos DB prend en charge une durée de vie (TTL) en fonction de l’horodatage du document. Vous pouvez activer la durée de vie d’une collection dans le portail Azure.
Durée de vie personnalisée
Cette fonctionnalité permet de définir une durée de vie personnalisée sur n’importe quel champ d’une collection.
Sur une collection dont la durée de vie est activée sur un champ :
Les types acceptables sont le type de données BSON et les types numériques (entier, long ou double), qui sont interprétés comme un horodatage Unix en millisecondes pour déterminer l’expiration.
Si le champ TTL est un tableau, le plus petit élément du tableau de type acceptable est pris en compte pour l’expiration du document.
Si le champ TTL est absent d’un document, celui-ci n’expire pas.
Si le champ TTL n’est pas un type acceptable, le document n’expire pas.
Limitations d’une durée de vie personnalisée
Un seul champ d’une collection peut avoir une durée de vie définie.
Quand un champ TTL personnalisé est défini, le champ
\_ts
ne peut pas être utilisé pour l’expiration du document.Vous ne pouvez pas utiliser le
\_ts
champ en plus.
Configuration
Vous pouvez activer une durée de vie personnalisée en mettant à jour la fonctionnalité EnableTtlOnCustomPath
du compte. Découvrez comment configurer les fonctionnalités.
Configurer la durée de vie
Pour configurer la durée de vie, exécutez la commande suivante : db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})
.
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.
Gérer les utilisateurs et les rôles
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 et clés en lecture-écriture et en lecture seule, qui peuvent être obtenus par le biais du portail Azure (sur la page des chaînes de connexion).
Éléments 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é. Découvrez comment utiliser les niveaux de cohérence pour optimiser la disponibilité et les performances.
Étapes suivantes
- Apprenez à utiliser Studio 3T avec Azure Cosmos DB for MongoDB.
- Apprenez à utiliser Robo 3T avec Azure Cosmos DB for MongoDB.
- 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é.
- Si vous ne connaissez que le nombre de vCores et de serveurs présents dans votre cluster de bases de données existant, lisez Estimation des unités de requête à l’aide de vCores ou de processeurs virtuels.
- Si vous connaissez les taux de requêtes typiques de votre charge de travail de base de données actuelle, lisez Estimation des unités de requête à l’aide du planificateur de capacité Azure Cosmos DB.