Azure Cosmos DB for MongoDB (version 3.6) : 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.

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 :

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

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 Oui
group Oui
indexStats Non
limit Oui
listLocalSessions Non
listSessions Non
lookup Partiel
match Oui
out Oui
project Oui
redact Oui
replaceRoot Oui
replaceWith Non
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 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 Non
2dsphere Oui
2d Index Non
Hashed Index Non

Propriétés d’index

Commande Prise en charge
TTL Oui
Unique Oui
Partial Non
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 Non
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 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, 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.

Étapes suivantes