Partage via


Azure Cosmos DB for MongoDB (version serveur 4.0) : fonctionnalités et syntaxe prises en charge

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 :

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

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

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 Oui
group Oui
indexStats No
limit Oui
listLocalSessions No
listSessions Non
lookup Partiel
match Oui
out Oui
project Oui
redact Oui
replaceRoot Oui
replaceWith No
sample Oui
skip Oui
sort Oui
sortByCount Oui
unwind Oui

Notes

$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.

L’activation de 16 Mo peut être effectuée sous l’onglet des fonctionnalités du portail Azure ou par programmation en ajoutant la capacité « EnableMongo16MBDocumentSupport ».

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({"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 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.

Étapes suivantes