Compartir vía


Características y sintaxis admitidas en la versión del servidor de Azure Cosmos DB para MongoDB 4.2

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 mensaje Success
  • db.coll.deleteMany({"city": "NYC"}) : se produce un error ShardKeyNotFound(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 \_ts no se puede utilizar para la expiración del documento.

  • No puede usar el campo \_ts adicionalmente.

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.