Azure Cosmos DB for MongoDB (versión 4.0 de servidor): características y sintaxis admitidas
Artículo
SE APLICA A: MongoDB
Azure Cosmos DB es un servicio de base de datos con varios modelos y de distribución global de Microsoft. 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 permite usar 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
A continuación se enumeran los operadores admitidos y las limitaciones o excepciones. 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, mientras que la versión 3.2 de las cuentas tiene el punto de conexión con 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. A continuación, 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:
$lookup todavía no admite la característica de subconsultas no correlacionadas introducida en la versión 3.6 del servidor. Recibirá un error con un mensaje que contiene el texto let is not supported si intenta utilizar el operador $lookup con los campos let y pipeline.
Expresiones booleanas
Get-Help
Compatible
and
Sí
not
Sí
or
Sí
Expresiones de conversión
Get-Help
Compatible
convert
Sí
toBool
Sí
toDate
Sí
toDecimal
Sí
toDouble
Sí
toInt
Sí
toLong
Sí
toObjectId
Sí
toString
Sí
Expresiones de conjunto
Get-Help
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 con un literal de matriz en la consulta.
Get-Help
Compatible
cmp
Sí
eq
Sí
gt
Sí
gte
Sí
lt
Sí
lte
Sí
ne
Sí
in
Sí
nin
Sí
Expresiones aritméticas
Get-Help
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í
sqrt
Sí
subtract
Sí
trunc
Sí
Expresiones de cadena
Get-Help
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
Get-Help
Compatible
meta
No
Expresiones de matriz
Get-Help
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
Get-Help
Compatible
map
Sí
let
Sí
Variables del sistema
Get-Help
Compatible
$$CURRENT
Sí
$$DESCEND
Sí
$$KEEP
Sí
$$PRUNE
Sí
$$REMOVE
Sí
$$ROOT
Sí
Operador literal
Get-Help
Compatible
literal
Sí
Expresiones de fecha
Get-Help
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
Get-Help
Compatible
cond
Sí
ifNull
Sí
switch
Sí
Operador de tipo de datos
Get-Help
Compatible
type
Sí
Expresiones de acumulador
Get-Help
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
Get-Help
Compatible
mergeObjects
Sí
Tipos de datos
Azure Cosmos DB for MongoDB admite documentos codificados en formato BSON de MongoDB. La versión 4.0 de la API mejora 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.
Se recomienda habilitar el reintento del lado servidor y evitar los índices de caracteres comodín para garantizar que las solicitudes con documentos más grandes se realicen correctamente. Si es necesario, la generación de las RU de base de datos o colección también puede ayudar al rendimiento.
Get-Help
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
Índices
Get-Help
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
Get-Help
Compatible
TTL
Sí
Unique
Sí
Partial
No
Case Insensitive
N.º
Sparse
No
Background
Sí
Operadores
Operadores lógicos
Get-Help
Compatible
or
Sí
and
Sí
not
Sí
nor
Sí
Operadores de elementos
Get-Help
Compatible
exists
Sí
type
Sí
Operadores de consulta de evaluación
Get-Help
Compatible
expr
Sí
jsonSchema
No
mod
Sí
regex
Sí
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' modificador (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, dada la siguiente consulta original: find({x:{$regex: /^abc$/}), tiene que modificarse de la siguiente forma:
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
La primera parte utilizará el índice para restringir la búsqueda a esos documentos que empiezan por ^ abc y la segunda parte buscará coincidencias con los datos exactos. El operador de barra '|' actúa como una función "or": la consulta find({x:{$regex: /^abc |^def/}) coincide con los documentos con los que el campo "x" tiene un valor que comienza por "abc" o "def". Para utilizar el índice, se recomienda dividir la consulta en dos consultas distintas combinadas mediante el operador $or: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).
Operadores de matriz
Get-Help
Compatible
all
Sí
elemMatch
Sí
size
Sí
Operador de comentario
Get-Help
Compatible
comment
Sí
Operadores de proyección
Get-Help
Compatible
elemMatch
Sí
meta
No
slice
Sí
Operadores de actualización
Operadores de actualización de campo
Get-Help
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
Get-Help
Compatible
$
Sí
$[]
Sí
$[\<identifier\>]
Sí
addToSet
Sí
pop
Sí
pullAll
Sí
pull
Sí
push
Sí
pushAll
Sí
Modificadores de actualización
Get-Help
Compatible
each
Sí
slice
Sí
sort
Sí
position
Sí
Operador de actualización bit a bit
Get-Help
Compatible
bit
Sí
bitsAllSet
No
bitsAnySet
N.º
bitsAllClear
N.º
bitsAnyClear
No
Operadores de geoespaciales
Operator
Compatible
$geoWithin
Sí
$geoIntersects
Sí
$near
Sí
$nearSphere
Sí
$geometry
Sí
$minDistance
Sí
$maxDistance
Sí
$center
No
$centerSphere
N.º
$box
N.º
$polygon
No
Operaciones de ordenación
Cuando se usa la operación findOneAndUpdate con la API para la versión 4.0 de MongoDB, se admiten operaciones de ordenación en un solo campo y en varios campos. Las operaciones de ordenación en varios campos eran una limitación de los protocolos de conexión anteriores.
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.
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 para lograr también una replicación global de baja latencia. Azure Cosmos DB no es compatible con comandos de replicación manuales.
Escrituras reintentables
La función de reintentos de escritura permite a los controladores de MongoDB reintentar automáticamente ciertas operaciones de escritura en caso de error, aunque genera requisitos más estrictos para determinadas operaciones, que coinciden con los requisitos del protocolo de MongoDB. Con esta característica habilitada, las operaciones de actualización, incluidas las eliminaciones, en colecciones particionadas requerirán 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 particionada en la clave "country": para eliminar todos los documentos con el campo city = "NYC", si se habilita la función de reintentos de escritura, la aplicación tendrá que ejecutar la operación para todos los valores de clave de partición ("country").
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 los comandos de particionamiento manuales, lo que significa que no tiene que invocar comandos como addShard, balancerStart, moveChunk, etc. Solo necesita especificar la clave de partición al crear los contenedores o consultar los datos.
Sesiones
Azure Cosmos DB todavía no admite los comandos de sesión del lado servidor.
Período de vida (TTL)
Azure Cosmos DB admite un período de vida (TTL) basado en la marca de tiempo del documento. TTL se puede habilitar para las colecciones mediante Azure Portal.
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 usuarios y 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 (página Cadena de conexión).
Write Concern
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. Más información en el artículo sobre el Uso de los niveles de coherencia para maximizar la disponibilidad y el rendimiento.
Pasos siguientes
Aprenda a usar Studio 3T con Azure Cosmos DB for MongoDB.
Aprenda a usar Robo 3T con Azure Cosmos DB for MongoDB.
Explore ejemplos de MongoDB con Azure Cosmos DB for MongoDB.
¿Intenta planear la capacidad de una migración a Azure Cosmos DB? Para ello, puede usar información sobre el clúster de bases de datos existente.