Azure Cosmos DB for MongoDB (versión 4.2 de servidor): características y sintaxis admitidas

SE APLICA A: MongoDB

Azure Cosmos DB es un servicio de base de datos con varios modelos distribuido de forma global de Microsoft. Azure Cosmos DB ofrece múltiples API de bases de datos. Puede comunicarse con Azure Cosmos DB for MongoDB mediante cualquiera de los controladores del cliente de MongoDB de código abierto. Azure Cosmos DB for MongoDB admite el uso de los controladores de cliente existentes mediante la adhesión al protocolo de conexión de MongoDB.

Con Azure Cosmos DB for MongoDB, puede disfrutar de las ventajas de MongoDB a las que está acostumbrado, con todas las funcionalidades empresariales que ofrece Azure Cosmos DB: distribución global, particionamiento automático, garantías de disponibilidad y latencia, cifrado en reposo, copias de seguridad y mucho más.

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 versiones 3.6 y posteriores de las cuentas tienen el punto de conexión con 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

En este artículo solo se enumeran los comandos de servidor admitidos y se excluyen las funciones contenedoras del lado 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 admitidos 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 secciones siguientes, encontrará una lista detallada de las opciones, comandos, fases, operadores y operaciones admitidos actualmente.

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

Get-Help Compatible
change streams
delete
eval No
find
findAndModify
getLastError
getMore
getPrevError No
insert
parallelCollectionScan No
resetError No
update

Comandos de transacción

Nota:

Las transacciones de varios documentos solo se admiten dentro de una única colección sin particiones. Las transacciones de varios documentos entre colecciones y particiones aún no se admiten en la API para MongoDB.

Get-Help Compatible
abortTransaction
commitTransaction

Comandos de autenticación

Get-Help Compatible
authenticate
getnonce
logout

Comandos de administración

Get-Help Compatible
cloneCollectionAsCapped No
collMod N.º
connectionStatus N.º
convertToCapped N.º
copydb No
create
createIndexes
currentOp
drop
dropDatabase
dropIndexes
filemd5
killCursors
killOp No
listCollections
listDatabases
listIndexes
reIndex
renameCollection No

Comandos de diagnóstico

Get-Help Compatible
buildInfo
collStats
connPoolStats No
connectionStatus N.º
dataSize N.º
dbHash No
dbStats
explain
features No
hostInfo
listDatabases
listCommands No
profiler N.º
serverStatus N.º
top No
whatsmyuri

Canalización de agregación

Azure Cosmos DB for MongoDB admite los siguientes comandos de agregación.

Comandos de agregación

Get-Help Compatible
aggregate
count
distinct
mapReduce No

Fases de agregación

Get-Help Compatible
addFields
bucket No
bucketAuto No
changeStream
collStats No
count
currentOp No
facet
geoNear
graphLookup No
group
indexStats No
limit
listLocalSessions No
listSessions No
lookup Parcial
match
merge
out
planCacheStats
project
redact
regexFind
regexFindAll
regexMatch
replaceRoot
replaceWith
sample
set
skip
sort
sortByCount
unset
unwind

Nota

La agregación $lookup todavía no admite la característica de subconsultas no correlacionadas introducida en la versión 3.6 del servidor. Si intenta usar el operador $lookup con los campos let y pipeline, aparecerá un mensaje de error que indica que let no es compatible.

Expresiones booleanas

Get-Help Compatible
and
not
or

Expresiones de conversión

Get-Help Compatible
convert
toBool
toDate
toDecimal
toDouble
toInt
toLong
toObjectId
toString

Expresiones de conjunto

Get-Help Compatible
setEquals
setIntersection
setUnion
setDifference
setIsSubset
anyElementTrue
allElementsTrue

Expresiones de comparación

Nota:

La API de MongoDB no admite expresiones de comparación con un literal de matriz en la consulta.

Get-Help Compatible
cmp
eq
gt
gte
lt
lte
ne
in
nin

Expresiones aritméticas

Get-Help Compatible
abs
add
ceil
divide
exp
floor
ln
log
log10
mod
multiply
pow
round
sqrt
subtract
trunc

Expresiones trigonométricas

Get-Help Compatible
acos
acosh
asin
asinh
atan
atan2
atanh
cos
cosh
degreesToRadians
radiansToDegrees
sin
sinh
tan
tanh

Expresiones de cadena

Get-Help Compatible
concat
indexOfBytes
indexOfCP
ltrim
rtrim
trim
split
strLenBytes
strLenCP
strcasecmp
substr
substrBytes
substrCP
toLower
toUpper

Operador de búsqueda de texto

Get-Help Compatible
meta No

Expresiones de matriz

Get-Help Compatible
arrayElemAt
arrayToObject
concatArrays
filter
indexOfArray
isArray
objectToArray
range
reverseArray
reduce
size
slice
zip
in

Operadores de variable

Get-Help Compatible
map
let

Variables del sistema

Get-Help Compatible
$$CLUSTERTIME
$$CURRENT
$$DESCEND
$$KEEP
$$NOW
$$PRUNE
$$REMOVE
$$ROOT

Operador literal

Get-Help Compatible
literal

Expresiones de fecha

Get-Help Compatible
dayOfYear
dayOfMonth
dayOfWeek
year
month
week
hour
minute
second
millisecond
dateToString
isoDayOfWeek
isoWeek
dateFromParts
dateToParts
dateFromString
isoWeekYear

Expresiones condicionales

Get-Help Compatible
cond
ifNull
switch

Operador de tipo de datos

Get-Help Compatible
type

Expresiones de acumulador

Get-Help Compatible
sum
avg
first
last
max
min
push
addToSet
stdDevPop
stdDevSamp

Operador de combinación

Get-Help Compatible
mergeObjects

Tipos de datos

Azure Cosmos DB for MongoDB admite documentos codificados en formato BSON 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 costos. Los documentos escritos o actualizados mediante un punto de conexión que ejecute la versión 4.0 o una posterior se beneficiarán de esta mejora.

En un escenario de actualización, los documentos escritos antes de la actualización a la versión 4.0 o posteriores no se beneficiarán del rendimiento mejorado hasta que se actualicen por medio de una operación de escritura que pase por 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 esta característica. Una vez que se ha habilitado esta característica para la 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 funcionalidad EnableMongo16MBDocumentSupport mediante programación.

Se recomienda habilitar el reintento del lado servidor y evitar el uso de índices comodín para asegurarse de que las solicitudes de documentos más grandes se realicen correctamente. Generar la base de datos o las unidades de solicitud de recopilación también puede ayudar al rendimiento.

Get-Help Compatible
Double
String
Object
Array
Binary Data
ObjectId
Boolean
Date
Null
32-bit Integer (int)
Timestamp
64-bit Integer (long)
MinKey
MaxKey
Decimal128
Regular Expression
JavaScript
JavaScript (with scope)
Undefined

Índices y propiedades de índice

Azure Cosmos DB for MongoDB es compatible con los siguientes comandos de índice y propiedades de índice.

Índices

Get-Help Compatible
Single Field Index
Compound Index
Multikey Index
Text Index No
2dsphere
2d Index No
Hashed Index No

Propiedades de índice

Get-Help Compatible
TTL
Unique
Partial Solo se admite para índices únicos
Case Insensitive No
Sparse No
Background

Operadores

Azure Cosmos DB for MongoDB es compatible con los siguientes operadores.

Operadores lógicos

Get-Help Compatible
or
and
not
nor

Operadores de elementos

Get-Help Compatible
exists
type

Operadores de consulta de evaluación

Get-Help Compatible
expr
jsonSchema No
mod
regex
text No (No es compatible. Use $regex en su lugar).
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), se realiza el examen de colección de 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 función "o". 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, se recomienda dividir la consulta en dos consultas diferentes unidas por el operador $or: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Operadores de matriz

Get-Help Compatible
all
elemMatch
size

Operador de comentario

Get-Help Compatible
comment

Operadores de proyección

Get-Help Compatible
elemMatch
meta No
slice

Operadores de actualización

Operadores de actualización de campo

Get-Help Compatible
inc
mul
rename
setOnInsert
set
unset
min
max
currentDate

Operadores de actualización de matriz

Get-Help Compatible
$
$[]
$[\<identifier\>]
addToSet
pop
pullAll
pull
push
pushAll

Modificadores de actualización

Get-Help Compatible
each
slice
sort
position

Operador de actualización bit a bit

Get-Help Compatible
bit
bitsAllSet No
bitsAnySet N.º
bitsAllClear N.º
bitsAnyClear No

Operadores de geoespaciales

Operator Compatible
$geoWithin
$geoIntersects
$near
$nearSphere
$geometry
$minDistance
$maxDistance
$center No
$centerSphere N.º
$box N.º
$polygon No

Operaciones de ordenación

Cuando se usa la operación findOneAndUpdate, se admiten las 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 campo en el nivel de cliente es una característica del controlador y es compatible con la API de MongoDB. El cifrado explícito, en el que el controlador cifra explícitamente cada campo cuando se escribe, es compatible. No se admite el cifrado automático. Se admite 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 se amplía también para lograr una replicación global de baja latencia. Azure Cosmos DB no es compatible con comandos de replicación manuales.

Escrituras reintentables

La característica de Escrituras reintentables permite a los controladores de MongoDB reintentar automáticamente ciertas 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 instrucción update.

Por ejemplo, con una colección fragmentada que está fragmentada en la clave "country", para eliminar todos los documentos que tienen el campo "city" = "NYC", la aplicación necesita ejecutar la operación para todos los valores de la clave fragmentada ("country") si está habilitada la característica de escrituras reintentables.

  • db.coll.deleteMany({"country": "USA", "city": "NYC"}) - Correcto
  • db.coll.deleteMany({"city": "NYC"}) - Error ShardKeyNotFound(61)

Nota

En este momento, las escrituras que se pueden reintentar no admiten escrituras desordenadas masivas. Si quiere realizar escrituras masivas con escrituras que se pueden reintentar habilitadas, realice escrituras ordenadas de forma masiva.

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 la creación de particiones, la ubicación y el equilibrio de forma automática. 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 del fragmento 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 admite un período de vida (TTL) basado en la marca de tiempo del documento. Puede habilitar TTL para una colección en Azure Portal.

TTL personalizado

Esta característica proporciona la capacidad de establecer un TTL personalizado en cualquier campo de una colección.

En una colección con TTL habilitado en un campo:

  • Los tipos aceptables son el tipo de datos BSON y los tipos numéricos (entero, largo o doble), que se interpretarán 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 establecido, no se puede usar el campo \_ts 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. Consulte el procedimiento para configurar funcionalidades.

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 (Azure RBAC) 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. Cualquier nivel de Write Concern especificado por el código de cliente se ignora. Obtenga información sobre cómo usar los niveles de consistencia para maximizar la disponibilidad y el rendimiento.

Pasos siguientes