Azure Cosmos DB for MongoDB (versión 5.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 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 |
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 ú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 |
Sí |
commitTransaction |
Sí |
Comandos de autenticación
Get-Help | Compatible |
---|---|
authenticate |
Sí |
getnonce |
Sí |
logout |
Sí |
Comandos de administración
Get-Help | Compatible |
---|---|
cloneCollectionAsCapped |
No |
collMod |
N.º |
connectionStatus |
N.º |
convertToCapped |
N.º |
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
Get-Help | Compatible |
---|---|
buildInfo |
Sí |
collStats |
Sí |
connPoolStats |
No |
connectionStatus |
N.º |
dataSize |
N.º |
dbHash |
No |
dbStats |
Sí |
explain |
Sí |
features |
No |
hostInfo |
Sí |
listDatabases |
Sí |
listCommands |
No |
profiler |
N.º |
serverStatus |
N.º |
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
Get-Help | Compatible |
---|---|
aggregate |
Sí |
count |
Sí |
distinct |
Sí |
mapReduce |
No |
Fases de agregación
Get-Help | 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 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 |
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í |
round |
Sí |
sqrt |
Sí |
subtract |
Sí |
trunc |
Sí |
Expresiones trigonométricas
Get-Help | 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
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 |
---|---|
$$CLUSTERTIME |
Sí |
$$CURRENT |
Sí |
$$DESCEND |
Sí |
$$KEEP |
Sí |
$$NOW |
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 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 |
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
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 |
Solo se admite para índices únicos |
Case Insensitive |
No |
Sparse |
No |
Background |
Sí |
Operadores
Azure Cosmos DB for MongoDB es compatible con los siguientes 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
(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 |
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
, 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"})
- Correctodb.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
- 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.
- Si lo único que sabe es el número de núcleos virtuales y servidores del clúster de bases de datos existente, consulte la información sobre el cálculo de unidades de solicitud mediante núcleos virtuales o CPU virtuales.
- Si conoce las tasas de solicitudes típicas de la carga de trabajo de base de datos actual, lea sobre la estimación de unidades de solicitud mediante la herramienta de planeamiento de capacidad de Azure Cosmos DB.