Compartir vía


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

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:

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

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

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
group
indexStats No
limit
listLocalSessions No
listSessions No
lookup Parcial
match
out
project
redact
replaceRoot
replaceWith No
sample
skip
sort
sortByCount
unwind

Nota

$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
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
sqrt
subtract
trunc

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
$$CURRENT
$$DESCEND
$$KEEP
$$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 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.

La habilitación de 16 MB se puede realizar en la pestaña de características de Azure Portal, o bien mediante programación si se agrega la funcionalidad "EnableMongo16MBDocumentSupport".

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
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

Í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 No
Case Insensitive N.º
Sparse No
Background

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' 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
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 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").

  • 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 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