API de Azure Cosmos DB para MongoDB (versión 4.0 de servidor): características y sintaxis que se admiten

SE APLICA A: Azure Cosmos DB API para MongoDB

Azure Cosmos DB es un servicio de base de datos con varios modelos y de distribución global de Microsoft. Puede comunicarse con la API de Azure Cosmos DB para MongoDB mediante cualquiera de los controladores del cliente de MongoDB de código abierto. La API de Azure Cosmos DB para MongoDB permite usar los controladores de cliente existentes mediante la adhesión al protocolo de conexión de MongoDB.

Con la API de Azure Cosmos DB para MongoDB, puede disfrutar de las ventajas de MongoDB a las que está acostumbrado, con todas las funcionalidades empresariales que ofrece 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 la API de Azure Cosmos DB para MongoDB. Cuando se usa la API de Azure Cosmos DB para las cuentas de MongoDB, las versiones 3.6 y posteriores de las cuentas tienen el punto de conexión con el formato *.mongo.cosmos.azure.com, mientras que la versión 3.2 de las cuentas tiene el 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 la API de Azure Cosmos DB para MongoDB.

Compatibilidad con lenguajes de consulta

La API de Azure Cosmos DB para 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

La API de Azure Cosmos DB para MongoDB admite los siguientes comandos de base de datos:

Comandos de operación de consulta y escritura

Get-Help Compatible
Flujos de cambio
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 No
connectionStatus No
convertToCapped No
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 No
dataSize No
dbHash No
dbStats
explain
features No
hostInfo
listDatabases
listCommands No
profiler No
serverStatus No
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 Yes
$dateToParts Yes
$dateFromString Yes
$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

La API de Azure Cosmos DB para 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 con un punto de conexión que ejecute la versión 4.0 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 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.

Get-Help Compatible
Double
String
Object
Array
Binary Data
ObjectId
Boolean
Date
Null
Entero de 32 bits (int)
Timestamp
Entero de 64 bits (long)
MinKey
MaxKey
Decimal128
Expresión regular
JavaScript
JavaScript (con ámbito)
No definido

Índices y propiedades de índice

Índices

Get-Help Compatible
Índice de campo único
Índice compuesto
Índice de varias claves
Índice de texto No
2dsphere
Índice 2d No
Índice de hash

Propiedades de índice

Get-Help Compatible
TTL
Único
Parcial No
No distingue mayúsculas de minúsculas No
Dispersos No
Información previa

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 No
$jsonSchema No
$mod
$regex
$text No (No admitido. Utilice $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 No
$bitsAllClear No
$bitsAnyClear No

Operadores de geoespaciales

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

Operaciones de ordenación

Cuando se usa la operación findOneAndUpdate, se admiten las operaciones de ordenación en un solo campo, pero no se admiten las operaciones de ordenación en varios campos.

Indización

La API de MongoDB admite una variedad de índices para habilitar la ordenación en varios campos, mejorar el rendimiento de las consultas y aplicar la unidad.

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. Cosmos DB no es compatible con comandos de replicación manuales.

Escrituras reintentables

Cosmos DB no admite aún escrituras reintentables. Los controladores cliente deben agregar el parámetro de URL "retryWrites=false" a su cadena de conexión. Se pueden agregar más parámetros de URL si se les antepone el prefijo "&".

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, moveChunk, etc. Solo tiene que especificar la clave de partición al crear los contenedores o consultar los datos.

Sesiones

Azure Cosmos DB todavía no admite comandos de sesiones 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 en colecciones ni en 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 no admite aún usuarios y roles. Sin embargo, 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 Cosmos DB controla la replicación en un segundo plano todas las escrituras se establecen automáticamente como cuórum de forma 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