Compartir vía


Características y sintaxis admitidas en la versión del servidor de Azure Cosmos DB para MongoDB 3.6

Azure Cosmos DB para MongoDB 3.6 permite usar características conocidas de MongoDB con funcionalidades de nivel empresarial, como la distribución global, el particionamiento automático y la alta disponibilidad. En este artículo se describen las características, la sintaxis y las ventajas admitidas del uso de Azure Cosmos DB para MongoDB 3.6.

Importante

La versión 3.6 de Azure Cosmos DB para MongoDB no tiene planes actuales para el fin de soporte técnico. El aviso mínimo para un fin de soporte técnico futuro es de tres años.

Compatibilidad con protocolos

Azure Cosmos DB for MongoDB es compatible de manera predeterminada con la versión 3.6 del servidor de MongoDB para las cuentas nuevas. Los operadores admitidos y las limitaciones o excepciones se enumeran aquí. Cualquier controlador de cliente que reconozca estos protocolos podrá conectarse a Azure Cosmos DB for MongoDB. Al crear cuentas de la API de Azure Cosmos DB for MongoDB, la versión 3.6 de la cuenta tiene el punto de conexión con el formato *.mongo.cosmos.azure.com, mientras que la versión 3.2 de la cuenta tiene el punto de conexión con el formato *.documents.azure.com.

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 se muestra la lista detallada de operaciones de servidor, operadores, fases, comandos y opciones admitidos actualmente en Azure Cosmos DB.

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.

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

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 autenticación

Compatible
authenticate ✅ Sí
getnonce ✅ Sí
logout ✅ Sí

Comandos de administración

Compatible
cloneCollectionAsCapped ✖️ No
collMod ✖️ No
connectionStatus ✖️ No
convertToCapped ✖️ No
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

Compatible
buildInfo ✅ Sí
collStats ✅ Sí
connPoolStats ✖️ No
connectionStatus ✖️ No
dataSize ✖️ No
dbHash ✖️ No
dbStats ✅ Sí
explain ✅ Sí
features ✖️ No
hello ✅ Sí
hostInfo ✅ Sí
listDatabases ✅ Sí
listCommands ✖️ No
profiler ✖️ No
serverStatus ✖️ No
top ✖️ No
whatsmyuri ✅ Sí

Canalización de agregación

Comandos de agregación

Compatible
aggregate ✅ Sí
count ✅ Sí
distinct ✅ Sí
mapReduce ✖️ No

Fases de agregación

Compatible
addFields ✅ Sí
bucket ✖️ No
bucketAuto ✖️ No
changeStream ✅ Sí
collStats ✖️ No
count ✅ Sí
currentOp ✖️ No
facet ✅ Sí
geoNear ✅ Sí
graphLookup ✅ Sí
group ✅ Sí
indexStats ✖️ No
limit ✅ Sí
listLocalSessions ✖️ No
listSessions ✖️ No
lookup ❓Parcial
match ✅ Sí
out ✅ Sí
project ✅ Sí
redact ✅ Sí
replaceRoot ✅ Sí
replaceWith ✖️ No
sample ✅ Sí
skip ✅ Sí
sort ✅ Sí
sortByCount ✅ Sí
unwind ✅ Sí

Nota:

$lookup aún 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 let is not supported si intenta usar el $lookup operador con let campos y pipeline .

Expresiones booleanas

Compatible
and ✅ Sí
not ✅ Sí
or ✅ Sí

Expresiones de conjunto

Compatible
setEquals ✅ Sí
setIntersection ✅ Sí
setUnion ✅ Sí
setDifference ✅ Sí
setIsSubset ✅ Sí
anyElementTrue ✅ Sí
allElementsTrue ✅ Sí

Expresiones de comparación

Nota:

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

Compatible
cmp ✅ Sí
eq ✅ Sí
gt ✅ Sí
gte ✅ Sí
lt ✅ Sí
lte ✅ Sí
ne ✅ Sí
in ✅ Sí
nin ✅ Sí

Expresiones aritméticas

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

Compatible
concat ✅ Sí
indexOfBytes ✅ Sí
indexOfCP ✅ 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

Compatible
meta ✖️ No

Expresiones de matriz

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

Compatible
map ✅ Sí
let ✅ Sí

Variables del sistema

Compatible
$$CURRENT ✅ Sí
$$DESCEND ✅ Sí
$$KEEP ✅ Sí
$$PRUNE ✅ Sí
$$REMOVE ✅ Sí
$$ROOT ✅ Sí

Operador literal

Compatible
literal ✅ Sí

Expresiones de fecha

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

Compatible
cond ✅ Sí
ifNull ✅ Sí
switch ✅ Sí

Operador de tipo de datos

Compatible
type ✅ Sí

Expresiones de acumulador

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

Compatible
mergeObjects ✅ Sí

Tipos de datos

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

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

Compatible
TTL ✅ Sí
Unique ✅ Sí
Partial ✖️ No
Case Insensitive ✖️ No
Sparse ✖️ No
Background ✅ Sí

Operadores

Operadores lógicos

Compatible
or ✅ Sí
and ✅ Sí
not ✅ Sí
nor ✅ Sí

Operadores de elementos

Compatible
exists ✅ Sí
type ✅ Sí

Operadores de consulta de evaluación

Compatible
expr ✅ Sí
jsonSchema ✖️ No
mod ✅ Sí
regex ✅ Sí
text ✖️ No
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 usa el índice para restringir la búsqueda a esos documentos a partir ^abc de y la segunda parte coincide con las entradas exactas. El operador de barra | actúa como una función "or": la consulta find({x:{$regex: /^abc |^def/}) hace coincidir los documentos en los que el campo x tiene valores que comienza por "abc" o "def". Para usar el índice, divida la consulta en dos consultas diferentes unidas por el operador $or: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Sugerencia

No se admite el text comando. En su lugar, use $regex.

Operadores de matriz

Compatible
all ✅ Sí
elemMatch ✅ Sí
size ✅ Sí

Operador de comentario

Compatible
comment ✅ Sí

Operadores de proyección

Compatible
elemMatch ✅ Sí
meta ✖️ No
slice ✅ Sí

Operadores de actualización

Operadores de actualización de campo

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

Compatible
$ ✅ Sí
$[] ✅ Sí
$[\<identifier\>] ✅ Sí
addToSet ✅ Sí
pop ✅ Sí
pullAll ✅ Sí
pull ✅ Sí
push ✅ Sí
pushAll ✅ Sí

Modificadores de actualización

Compatible
each ✅ Sí
slice ✅ Sí
sort ✅ Sí
position ✅ Sí

Operador de actualización bit a bit

Compatible
bit ✅ Sí
bitsAllSet ✖️ No
bitsAnySet ✖️ No
bitsAllClear ✖️ No
bitsAnyClear ✖️ No

Operadores de geoespaciales

Compatible
$geoWithin ✅ Sí
$geoIntersects ✅ Sí
$near ✅ Sí
$nearSphere ✅ Sí
$geometry ✅ Sí
$minDistance ✅ Sí
$maxDistance ✅ Sí
$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 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 a través de cualquier controlador MongoDB 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

Azure Cosmos DB no admite aún escrituras reintentables. Los controladores de cliente deben agregar retryWrites=false a su cadena de conexión.

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, balancerStarty moveChunk. 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 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.

Administración de usuarios y roles

Azure Cosmos DB todavía no admite usuarios y roles. Sin embargo, admite el control de acceso basado en rol de Azure y las contraseñas o claves de solo lectura y escritura que se pueden obtener a través del panel de cadenas de conexión en Azure Portal.

Problema de escritura

Algunas aplicaciones se basan en Write Concern, que especifica el número de respuestas necesarias durante una operación de escritura. Debido a cómo Azure Cosmos DB controla la replicación, todas las escrituras son automáticamente y de forma predeterminada el cuórum mayoritario cuando se utiliza la coherencia fuerte. 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.