Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure Cosmos DB para MongoDB 4.2 le permite usar características conocidas de MongoDB con funcionalidades de nivel empresarial, como la distribución global, el particionamiento automático y la alta disponibilidad. En este artículo se describen las características, la sintaxis y las ventajas admitidas del uso de Azure Cosmos DB para MongoDB 4.2.
Compatibilidad con protocolos
Los operadores admitidos y las limitaciones o excepciones se enumeran en este artículo. Cualquier controlador de cliente que reconozca estos protocolos podrá conectarse a Azure Cosmos DB for MongoDB. Al crear cuentas de Azure Cosmos DB for MongoDB, las cuentas de la versión 3.6+ tienen un punto de conexión con el formato *.mongo.cosmos.azure.com. La versión 3.2 de las cuentas tiene un punto de conexión con el formato *.documents.azure.com.
Nota:
Este artículo solo enumera los comandos de servidor compatibles y excluye las funciones de contenedor del lado del cliente. Las funciones contenedoras del lado cliente, como deleteMany() y updateMany() usan internamente los comandos de servidor delete() y update(). Las funciones que usan comandos de servidor compatibles son compatibles con Azure Cosmos DB for MongoDB.
Compatibilidad con lenguajes de consulta
Azure Cosmos DB for MongoDB proporciona una compatibilidad completa con las construcciones del lenguaje de consulta de MongoDB. En las siguientes secciones, encontrará la lista detallada de las operaciones, operadores, fases, comandos y opciones actualmente compatibles.
Comandos de base de datos
Azure Cosmos DB for MongoDB admite los siguientes comandos de base de datos.
Comandos de operación de consulta y escritura
| Compatible | |
|---|---|
change streams |
✅ Sí |
delete |
✅ Sí |
eval |
✖️ No |
find |
✅ Sí |
findAndModify |
✅ Sí |
getLastError |
✅ Sí |
getMore |
✅ Sí |
getPrevError |
✖️ No |
insert |
✅ Sí |
parallelCollectionScan |
✖️ No |
resetError |
✖️ No |
update |
✅ Sí |
Comandos de transacción
Nota:
Las transacciones de varios documentos solo se admiten dentro de una sola colección no particionada. Las transacciones entre colecciones y entre particiones de varios documentos aún no se admiten en la API para MongoDB.
| Compatible | |
|---|---|
abortTransaction |
✅ Sí |
commitTransaction |
✅ Sí |
Comandos de autenticación
| Compatible | |
|---|---|
authenticate |
✅ Sí |
getnonce |
✅ Sí |
logout |
✅ Sí |
Comandos de administración
| Compatible | |
|---|---|
cloneCollectionAsCapped |
✖️ No |
collMod |
✖️ No |
connectionStatus |
✖️ No |
convertToCapped |
✖️ No |
copydb |
✖️ No |
create |
✅ Sí |
createIndexes |
✅ Sí |
currentOp |
✅ Sí |
drop |
✅ Sí |
dropDatabase |
✅ Sí |
dropIndexes |
✅ Sí |
filemd5 |
✅ Sí |
killCursors |
✅ Sí |
killOp |
✖️ No |
listCollections |
✅ Sí |
listDatabases |
✅ Sí |
listIndexes |
✅ Sí |
reIndex |
✅ Sí |
renameCollection |
✖️ No |
Comandos de diagnóstico
| Compatible | |
|---|---|
buildInfo |
✅ Sí |
collStats |
✅ Sí |
connPoolStats |
✖️ No |
connectionStatus |
✖️ No |
dataSize |
✖️ No |
dbHash |
✖️ No |
dbStats |
✅ Sí |
explain |
✅ Sí |
features |
✖️ No |
hello |
✅ Sí |
hostInfo |
✅ Sí |
listDatabases |
✅ Sí |
listCommands |
✖️ No |
profiler |
✖️ No |
serverStatus |
✖️ No |
top |
✖️ No |
whatsmyuri |
✅ Sí |
Canalización de agregación
Azure Cosmos DB for MongoDB admite los siguientes comandos de agregación.
Comandos de agregación
| Compatible | |
|---|---|
aggregate |
✅ Sí |
count |
✅ Sí |
distinct |
✅ Sí |
mapReduce |
✖️ No |
Fases de agregación
| Compatible | |
|---|---|
addFields |
✅ Sí |
bucket |
✖️ No |
bucketAuto |
✖️ No |
changeStream |
✅ Sí |
collStats |
✖️ No |
count |
✅ Sí |
currentOp |
✖️ No |
facet |
✅ Sí |
geoNear |
✅ Sí |
graphLookup |
✖️ No |
group |
✅ Sí |
indexStats |
✖️ No |
limit |
✅ Sí |
listLocalSessions |
✖️ No |
listSessions |
✖️ No |
lookup |
❓Parcial |
match |
✅ Sí |
merge |
✅ Sí |
out |
✅ Sí |
planCacheStats |
✅ Sí |
project |
✅ Sí |
redact |
✅ Sí |
regexFind |
✅ Sí |
regexFindAll |
✅ Sí |
regexMatch |
✅ Sí |
replaceRoot |
✅ Sí |
replaceWith |
✅ Sí |
sample |
✅ Sí |
set |
✅ Sí |
skip |
✅ Sí |
sort |
✅ Sí |
sortByCount |
✅ Sí |
unset |
✅ Sí |
unwind |
✅ Sí |
Nota:
La $lookup agregación no admite la característica de subconsultas no correlacionadas introducida en la versión 3.6 del servidor. El uso del $lookup operador con los let campos y pipeline da como resultado un mensaje de error que indica que "let no se admite".
Expresiones booleanas
| Compatible | |
|---|---|
and |
✅ Sí |
not |
✅ Sí |
or |
✅ Sí |
Expresiones de conversión
| Compatible | |
|---|---|
convert |
✅ Sí |
toBool |
✅ Sí |
toDate |
✅ Sí |
toDecimal |
✅ Sí |
toDouble |
✅ Sí |
toInt |
✅ Sí |
toLong |
✅ Sí |
toObjectId |
✅ Sí |
toString |
✅ Sí |
Expresiones de conjunto
| Compatible | |
|---|---|
setEquals |
✅ Sí |
setIntersection |
✅ Sí |
setUnion |
✅ Sí |
setDifference |
✅ Sí |
setIsSubset |
✅ Sí |
anyElementTrue |
✅ Sí |
allElementsTrue |
✅ Sí |
Expresiones de comparación
Nota:
La API de MongoDB no admite expresiones de comparación que contienen un literal de array en la consulta.
| Compatible | |
|---|---|
cmp |
✅ Sí |
eq |
✅ Sí |
gt |
✅ Sí |
gte |
✅ Sí |
lt |
✅ Sí |
lte |
✅ Sí |
ne |
✅ Sí |
in |
✅ Sí |
nin |
✅ Sí |
Expresiones aritméticas
| Compatible | |
|---|---|
abs |
✅ Sí |
add |
✅ Sí |
ceil |
✅ Sí |
divide |
✅ Sí |
exp |
✅ Sí |
floor |
✅ Sí |
ln |
✅ Sí |
log |
✅ Sí |
log10 |
✅ Sí |
mod |
✅ Sí |
multiply |
✅ Sí |
pow |
✅ Sí |
round |
✅ Sí |
sqrt |
✅ Sí |
subtract |
✅ Sí |
trunc |
✅ Sí |
Expresiones trigonométricas
| Compatible | |
|---|---|
acos |
✅ Sí |
acosh |
✅ Sí |
asin |
✅ Sí |
asinh |
✅ Sí |
atan |
✅ Sí |
atan2 |
✅ Sí |
atanh |
✅ Sí |
cos |
✅ Sí |
cosh |
✅ Sí |
degreesToRadians |
✅ Sí |
radiansToDegrees |
✅ Sí |
sin |
✅ Sí |
sinh |
✅ Sí |
tan |
✅ Sí |
tanh |
✅ Sí |
Expresiones de cadena
| Compatible | |
|---|---|
concat |
✅ Sí |
indexOfBytes |
✅ Sí |
indexOfCP |
✅ Sí |
ltrim |
✅ Sí |
rtrim |
✅ Sí |
trim |
✅ Sí |
split |
✅ Sí |
strLenBytes |
✅ Sí |
strLenCP |
✅ Sí |
strcasecmp |
✅ Sí |
substr |
✅ Sí |
substrBytes |
✅ Sí |
substrCP |
✅ Sí |
toLower |
✅ Sí |
toUpper |
✅ Sí |
Operador de búsqueda de texto
| Compatible | |
|---|---|
meta |
✖️ No |
Expresiones de matriz
| Compatible | |
|---|---|
arrayElemAt |
✅ Sí |
arrayToObject |
✅ Sí |
concatArrays |
✅ Sí |
filter |
✅ Sí |
indexOfArray |
✅ Sí |
isArray |
✅ Sí |
objectToArray |
✅ Sí |
range |
✅ Sí |
reverseArray |
✅ Sí |
reduce |
✅ Sí |
size |
✅ Sí |
slice |
✅ Sí |
zip |
✅ Sí |
in |
✅ Sí |
Operadores de variable
| Compatible | |
|---|---|
map |
✅ Sí |
let |
✅ Sí |
Variables del sistema
| Compatible | |
|---|---|
$$CLUSTERTIME |
✅ Sí |
$$CURRENT |
✅ Sí |
$$DESCEND |
✅ Sí |
$$KEEP |
✅ Sí |
$$NOW |
✅ Sí |
$$PRUNE |
✅ Sí |
$$REMOVE |
✅ Sí |
$$ROOT |
✅ Sí |
Operador literal
| Compatible | |
|---|---|
literal |
✅ Sí |
Expresiones de fecha
| Compatible | |
|---|---|
dayOfYear |
✅ Sí |
dayOfMonth |
✅ Sí |
dayOfWeek |
✅ Sí |
year |
✅ Sí |
month |
✅ Sí |
week |
✅ Sí |
hour |
✅ Sí |
minute |
✅ Sí |
second |
✅ Sí |
millisecond |
✅ Sí |
dateToString |
✅ Sí |
isoDayOfWeek |
✅ Sí |
isoWeek |
✅ Sí |
dateFromParts |
✅ Sí |
dateToParts |
✅ Sí |
dateFromString |
✅ Sí |
isoWeekYear |
✅ Sí |
Expresiones condicionales
| Compatible | |
|---|---|
cond |
✅ Sí |
ifNull |
✅ Sí |
switch |
✅ Sí |
Operador de tipo de datos
| Compatible | |
|---|---|
type |
✅ Sí |
Expresiones de acumulador
| Compatible | |
|---|---|
sum |
✅ Sí |
avg |
✅ Sí |
first |
✅ Sí |
last |
✅ Sí |
max |
✅ Sí |
min |
✅ Sí |
push |
✅ Sí |
addToSet |
✅ Sí |
stdDevPop |
✅ Sí |
stdDevSamp |
✅ Sí |
Operador de combinación
| Compatible | |
|---|---|
mergeObjects |
✅ Sí |
Tipos de datos
Azure Cosmos DB para MongoDB admite documentos codificados en formato JSON binario de MongoDB. La versión 4.0 y posteriores (4.0+) mejoran el uso interno de este formato, lo que supone mejorar el rendimiento y reducir los costes. Los documentos que se escriben o actualizan a través de un punto de conexión que ejecuta la versión 4.0 o superior se benefician de esta optimización.
En un escenario de actualización a la versión 4.0 o posterior, los documentos creados antes de actualizar no se benefician inmediatamente del rendimiento mejorado. Para aprovechar las mejoras, actualice estos documentos a través de una operación de escritura mediante el punto de conexión 4.0.
La compatibilidad con documentos de 16 MB aumenta el límite de tamaño de los documentos de 2 MB a 16 MB. Este límite solo se aplica a las colecciones creadas después de habilitar la característica. Después de habilitar esta característica para una cuenta de base de datos, no se puede deshabilitar.
Para habilitar la compatibilidad con documentos de 16 MB, cambie la configuración de la pestaña Características del recurso en Azure Portal o agregue la EnableMongo16MBDocumentSupport funcionalidad mediante programación.
Recomendamos habilitar la reintento del lado del servidor y evitar el uso de índices comodín para garantizar que las solicitudes en documentos más grandes se realicen correctamente. Aumentar las unidades de solicitud de la base de datos o la colección también puede ayudar a mejorar el rendimiento.
| Compatible | |
|---|---|
Double |
✅ Sí |
String |
✅ Sí |
Object |
✅ Sí |
Array |
✅ Sí |
Binary Data |
✅ Sí |
ObjectId |
✅ Sí |
Boolean |
✅ Sí |
Date |
✅ Sí |
Null |
✅ Sí |
32-bit Integer (int) |
✅ Sí |
Timestamp |
✅ Sí |
64-bit Integer (long) |
✅ Sí |
MinKey |
✅ Sí |
MaxKey |
✅ Sí |
Decimal128 |
✅ Sí |
Regular Expression |
✅ Sí |
JavaScript |
✅ Sí |
JavaScript (with scope) |
✅ Sí |
Undefined |
✅ Sí |
Índices y propiedades de índice
Azure Cosmos DB for MongoDB es compatible con los siguientes comandos de índice y propiedades de índice.
Índices
| Compatible | |
|---|---|
Single Field Index |
✅ Sí |
Compound Index |
✅ Sí |
Multikey Index |
✅ Sí |
Text Index |
✖️ No |
2dsphere |
✅ Sí |
2d Index |
✖️ No |
Hashed Index |
✖️ No |
Propiedades de índice
| Compatible | |
|---|---|
TTL |
✅ Sí |
Unique |
✅ Sí |
Partial |
❓Parcial |
Case Insensitive |
✖️ No |
Sparse |
✖️ No |
Background |
✅ Sí |
Sugerencia
Partial solo se admite para índices únicos.
Operadores
Azure Cosmos DB for MongoDB es compatible con los siguientes operadores.
Operadores lógicos
| Compatible | |
|---|---|
or |
✅ Sí |
and |
✅ Sí |
not |
✅ Sí |
nor |
✅ Sí |
Operadores de elementos
| Compatible | |
|---|---|
exists |
✅ Sí |
type |
✅ Sí |
Operadores de consulta de evaluación
| Compatible | |
|---|---|
expr |
✅ Sí |
jsonSchema |
✖️ No |
mod |
✅ Sí |
regex |
✅ Sí |
text |
✖️ No |
where |
✖️ No |
En las consultas de $regex, las expresiones ancladas a la izquierda permiten la búsqueda de índice. Sin embargo, si utiliza el modificador i (no distingue mayúsculas y minúsculas) y el modificador m (multilínea), hace que la colección examine todas las expresiones.
Cuando es necesario incluir $ o |, es mejor crear dos (o más) consultas $regex.
Por ejemplo, cambie la siguiente consulta original:
find({x:{$regex: /^abc$/})
Para esta consulta:
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
La primera parte de la consulta modificada usa el índice para restringir la búsqueda a los documentos que comienzan por ^abc. La segunda parte de la consulta coincide con las entradas exactas. El operador de barra (|) actúa como una or función. La consulta find({x:{$regex: /^abc |^def/}) coincide con los documentos en los que el campo x tiene valores que empiezan por abc o def. Para usar el índice, divida la consulta en dos consultas independientes y únala con el $or operador : find({$or: [{x: {$regex: /^abc/}}, {x: {$regex: /^def/}}]}).
Sugerencia
No se admite el text comando. En su lugar, use $regex.
Operadores de matriz
| Compatible | |
|---|---|
all |
✅ Sí |
elemMatch |
✅ Sí |
size |
✅ Sí |
Operador de comentario
| Compatible | |
|---|---|
comment |
✅ Sí |
Operadores de proyección
| Compatible | |
|---|---|
elemMatch |
✅ Sí |
meta |
✖️ No |
slice |
✅ Sí |
Operadores de actualización
Operadores de actualización de campo
| Compatible | |
|---|---|
inc |
✅ Sí |
mul |
✅ Sí |
rename |
✅ Sí |
setOnInsert |
✅ Sí |
set |
✅ Sí |
unset |
✅ Sí |
min |
✅ Sí |
max |
✅ Sí |
currentDate |
✅ Sí |
Operadores de actualización de matriz
| Compatible | |
|---|---|
$ |
✅ Sí |
$[] |
✅ Sí |
$[\<identifier\>] |
✅ Sí |
addToSet |
✅ Sí |
pop |
✅ Sí |
pullAll |
✅ Sí |
pull |
✅ Sí |
push |
✅ Sí |
pushAll |
✅ Sí |
Modificadores de actualización
| Compatible | |
|---|---|
each |
✅ Sí |
slice |
✅ Sí |
sort |
✅ Sí |
position |
✅ Sí |
Operador de actualización bit a bit
| Compatible | |
|---|---|
bit |
✅ Sí |
bitsAllSet |
✖️ No |
bitsAnySet |
✖️ No |
bitsAllClear |
✖️ No |
bitsAnyClear |
✖️ No |
Operadores de geoespaciales
| Compatible | |
|---|---|
$geoWithin |
✅ Sí |
$geoIntersects |
✅ Sí |
$near |
✅ Sí |
$nearSphere |
✅ Sí |
$geometry |
✅ Sí |
$minDistance |
✅ Sí |
$maxDistance |
✅ Sí |
$center |
✖️ No |
$centerSphere |
✖️ No |
$box |
✖️ No |
$polygon |
✖️ No |
Operaciones de ordenación
Cuando se usa la operación findOneAndUpdate, se admiten operaciones de ordenación en un solo campo. No se admiten operaciones de ordenación en varios campos.
Indización
La API para MongoDB admite varios índices para habilitar la ordenación en varios campos, mejorar el rendimiento de las consultas y exigir la unicidad.
Cifrado en el nivel de campo del lado cliente
El cifrado de campos de nivel de cliente es una característica de controlador y funciona con Azure Cosmos DB para MongoDB. Se admite el cifrado explícito, donde el controlador cifra cada campo durante las operaciones de escritura. No se admite el cifrado automático. Se admiten el descifrado explícito y el descifrado automático.
mongocryptd no debe ejecutarse, ya que no es necesario para realizar ninguna de las operaciones admitidas.
GridFS
Azure Cosmos DB admite GridFS con cualquier controlador Mongo compatible con GridFS.
Replicación
Azure Cosmos DB admite la replicación automática y nativa en las capas más inferiores. Esta lógica también se amplía para lograr una replicación global de baja latencia. Azure Cosmos DB no es compatible con comandos de replicación manuales.
Reintentos de escritura
La característica de Reintentos de escritura permite a los controladores de MongoDB reintentar automáticamente determinadas operaciones de escritura. La característica supone requisitos más estrictos para determinadas operaciones, que coinciden con los requisitos de protocolo de MongoDB. Con esta característica habilitada, las operaciones de actualización, incluidas las eliminaciones, en colecciones particionadas requieren que la clave de partición se incluya en el filtro de consulta o en la declaración de actualización.
Por ejemplo, con una colección particionada, particionada en la clave region: Para eliminar todos los documentos con el campo city = "NYC", la aplicación debe ejecutar la operación para todos los valores de clave de partición (región) si Reintentos de escritura están habilitadas.
-
db.coll.deleteMany({"region": "USA", "city": "NYC"}): tiene éxito con el mensajeSuccess -
db.coll.deleteMany({"city": "NYC"}): se produce un errorShardKeyNotFound(61)
Nota:
La característica de Reintentos de escritura no admite escrituras masivas sin ordenar en este momento. Si desea realizar escrituras masivas con reintentos habilitados, realice escrituras masivas ordenadas.
Para habilitar la característica, agregue la funcionalidad EnableMongoRetryableWrites a la cuenta de la base de datos. Esta característica también se puede habilitar en la pestaña Características de Azure Portal.
Particionamiento
Azure Cosmos DB admite el particionamiento de servidor automático. Administra automáticamente la creación, la ubicación y el equilibrio de las particiones. Azure Cosmos DB no admite comandos de particionamiento manual, lo que significa que no tiene que invocar comandos como addShard, balancerStart y moveChunk. Solo tiene que especificar la clave de la partición cuando cree los contenedores o consulte los datos.
Sesiones
Azure Cosmos DB todavía no admite los comandos de sesión del lado servidor.
Período de vida
Azure Cosmos DB proporciona una funcionalidad de tiempo de vida (TTL) basada en la marca de tiempo del documento. Habilite TTL para una colección en Azure Portal.
TTL personalizado
Esta característica le permite especificar un valor TTL personalizado en un único campo dentro de una colección. Los documentos expiran en función del valor de este campo.
En una colección con TTL habilitado en un campo:
Los tipos aceptables son el tipo de datos JSON binario (BSON) y los tipos numéricos (entero, largo o doble), que se interpretan como una marca de tiempo de milisegundos de Unix para determinar la expiración.
Si el campo TTL es una matriz, el elemento más pequeño de la matriz de un tipo aceptable se considera para la expiración del documento.
Si falta el campo TTL de un documento, el documento no expira.
Si el campo TTL no es un tipo aceptable, el documento no expira.
Limitaciones del TTL personalizado
Solo un campo de una colección puede tener un TTL establecido.
Con un campo TTL personalizado configurado, el campo
\_tsno se puede utilizar para la expiración del documento.No puede usar el campo
\_tsadicionalmente.
Configuración
Puede habilitar un TTL personalizado actualizando la funcionalidad EnableTtlOnCustomPath de la cuenta. Aprenda cómo configurar las capacidades.
Configuración del TTL
Para configurar el TTL, ejecute este comando: db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})
Transacciones
Las transacciones de varios documentos se admiten en una colección no particionada. Las transacciones de varios documentos no se admiten entre colecciones ni en las colecciones con particiones. El tiempo de espera de las transacciones es un valor fijo de 5 segundos.
Administración de los usuarios y los roles.
Azure Cosmos DB todavía no admite usuarios y roles. Sin embargo, Azure Cosmos DB admite el control de acceso basado en rol de Azure y claves o contraseñas de solo lectura y escritura que se pueden obtener mediante Azure Portal (en la página Cadena de conexión).
Write concerns
Algunas aplicaciones se basan en Write Concern, que especifica el número de respuestas necesarias durante una operación de escritura. Debido a la forma en la que Azure Cosmos DB controla la replicación en segundo plano, todas las escrituras se establecen automáticamente como Quorum de manera predeterminada. Azure Cosmos DB omite cualquier problema de escritura especificado por el código de cliente. Obtenga información sobre cómo usar los niveles de consistencia para maximizar la disponibilidad y el rendimiento.