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é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 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
- 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 vCore 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 vCore 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 la section concernant l’estimation des unités de requête à l’aide du planificateur de capacité Azure Cosmos DB
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour