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 Non
find Oui
findAndModify Oui
getLastError Oui
getMore Oui
getPrevError Non
insert Oui
parallelCollectionScan Non
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 Non
listCollections Oui
listDatabases Oui
listIndexes Oui
reIndex Oui
renameCollection Non

Commandes de diagnostic

Commande Prise en charge
buildInfo Oui
collStats Oui
connPoolStats Non
connectionStatus Non
dataSize Non
dbHash Non
dbStats Oui
explain Oui
features Non
hostInfo Oui
listDatabases Oui
listCommands Non
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 Non
bucketAuto Non
changeStream Oui
collStats Non
count Oui
currentOp Non
facet Oui
geoNear Oui
graphLookup Non
group Oui
indexStats Non
limit Oui
listLocalSessions Non
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 Non
2dsphere Oui
2d Index Non
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 Non
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 Non
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 Non
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 Non
$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éussite
  • 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 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