Azure Cosmos DB for MongoDB (versión 3.2): 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 capacidades empresariales que ofrece Azure Cosmos DB: distribución global, particionamiento automático, garantías de disponibilidad y latencia, indexación automática de cada campo, cifrado en reposo, copias de seguridad y mucho más.

Nota

La versión 3.2 de Azure Cosmos DB for MongoDB no tiene planes actuales para el fin del ciclo de vida. El aviso mínimo para un próximo fin del ciclo de vida es de tres años.

Compatibilidad con protocolos

Todas las cuentas nuevas de Azure Cosmos DB for MongoDB son compatibles de manera predeterminada con la versión del servidor 3.6 de MongoDB. Este artículo trata sobre la versión 3.2 de MongoDB. 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.

Azure Cosmos DB for MongoDB también ofrece una experiencia de actualización sin problemas para las cuentas aptas. Obtenga más información en la guía de actualización de la versión de 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:

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 operación de consulta y escritura

  • delete
  • find
  • findAndModify
  • getLastError
  • getMore
  • insert
  • update

Comandos de autenticación

  • logout
  • authenticate
  • getnonce

Comandos de administración

  • dropDatabase
  • listCollections
  • drop
  • create
  • filemd5
  • createIndexes
  • listIndexes
  • dropIndexes
  • connectionStatus
  • reIndex

Comandos de diagnóstico

  • buildInfo
  • collStats
  • dbStats
  • hostInfo
  • listDatabases
  • whatsmyuri

Canalización de agregación

Comandos de agregación

  • aggregate
  • count
  • distinct

Fases de agregación

  • $project
  • $match
  • $limit
  • $skip
  • $unwind
  • $group
  • $sample
  • $sort
  • $lookup
  • $out
  • $count
  • $addFields

Expresiones de agregación

Expresiones booleanas

  • $and
  • $or
  • $not

Expresiones de conjunto

  • $setEquals
  • $setIntersection
  • $setUnion
  • $setDifference
  • $setIsSubset
  • $anyElementTrue
  • $allElementsTrue

Expresiones de comparación

  • $cmp
  • $eq
  • $gt
  • $gte
  • $lt
  • $lte
  • $ne

Expresiones aritméticas

  • $abs
  • $add
  • $ceil
  • $divide
  • $exp
  • $floor
  • $ln
  • $log
  • $log10
  • $mod
  • $multiply
  • $pow
  • $sqrt
  • $subtract
  • $trunc

Expresiones de cadena

  • $concat
  • $indexOfBytes
  • $indexOfCP
  • $split
  • $strLenBytes
  • $strLenCP
  • $strcasecmp
  • $substr
  • $substrBytes
  • $substrCP
  • $toLower
  • $toUpper

Expresiones de matriz

  • $arrayElemAt
  • $concatArrays
  • $filter
  • $indexOfArray
  • $isArray
  • $range
  • $reverseArray
  • $size
  • $slice
  • $in

Expresiones de fecha

  • $dayOfYear
  • $dayOfMonth
  • $dayOfWeek
  • $year
  • $month
  • $week
  • $hour
  • $minute
  • $second
  • $millisecond
  • $isoDayOfWeek
  • $isoWeek

Expresiones condicionales

  • $cond
  • $ifNull

Acumuladores de agregación

  • $sum
  • $avg
  • $first
  • $last
  • $max
  • $min
  • $push
  • $addToSet

Operadores

Los siguientes operadores son compatibles con los correspondientes ejemplos de su uso. Tenga en cuenta este documento de muestra utilizada en las consultas siguientes:

{
  "Volcano Name": "Rainier",
  "Country": "United States",
  "Region": "US-Washington",
  "Location": {
    "type": "Point",
    "coordinates": [
      -121.758,
      46.87
    ]
  },
  "Elevation": 4392,
  "Type": "Stratovolcano",
  "Status": "Dendrochronology",
  "Last Known Eruption": "Last known eruption from 1800-1899, inclusive"
}
Operator Ejemplo
eq { "Volcano Name": { $eq: "Rainier" } }
gt { "Elevation": { $gt: 4000 } }
gte { "Elevation": { $gte: 4392 } }
lt { "Elevation": { $lt: 5000 } }
lte { "Elevation": { $lte: 5000 } }
ne { "Elevation": { $ne: 1 } }
in { "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } }
nin { "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } }
or { $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] }
and { $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] }
not { "Elevation": { $not: { $gt: 5000 } } }
nor { $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] }
exists { "Status": { $exists: true } }
type { "Status": { $type: "string" } }
mod { "Elevation": { $mod: [ 4, 0 ] } }
regex { "Volcano Name": { $regex: "^Rain"} }

Notas

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

Operadores de actualización de campo

  • $inc
  • $mul
  • $rename
  • $setOnInsert
  • $set
  • $unset
  • $min
  • $max
  • $currentDate

Operadores de actualización de matriz

  • $addToSet
  • $pop
  • $pullAll
  • $pull (Nota: No se admite $pull con condición)
  • $pushAll
  • $push
  • $each
  • $slice
  • $sort
  • $position

Operador de actualización bit a bit

  • $bit

Operadores de geoespaciales

Operator Ejemplo Compatible
$geoWithin { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } }
$geoIntersects { "Location.coordinates": { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } }
$near { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } }
$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } }
$geometry { "Location.coordinates": { $geoWithin: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } }
$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } }
$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } }
$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } }
$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } }
$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } }
$polygon { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } }

Ordenar operaciones

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.

Otros operadores

Operator Ejemplo Notas
$all { "Location.coordinates": { $all: [-121.758, 46.87] } }
$elemMatch { "Location.coordinates": { $elemMatch: { $lt: 0 } } }
$size { "Location.coordinates": { $size: 2 } }
$comment { "Location.coordinates": { $elemMatch: { $lt: 0 } }, $comment: "Negative values"}
$text No compatible. Utilice $regex en su lugar.

Operadores no compatibles

Los operadores $where y $eval no son compatibles con Azure Cosmos DB.

Métodos

Los siguientes métodos son compatibles:

Métodos de cursor

Método Ejemplo Notas
cursor.sort() cursor.sort({ "Elevation": -1 }) No se devuelven los documentos sin criterio de ordenación.

Índices únicos

Azure Cosmos DB indexa cada campo de los documentos que se escriben en la base de datos de forma predeterminada. Los índices únicos garantizan que un campo concreto no tiene valores duplicados en todos los documentos de una colección, de forma similar a la manera en que se conserva la singularidad en la clave _id predeterminada. Puede crear índices personalizados en Azure Cosmos DB mediante el comando createIndex, incluida la restricción "unique".

Hay disponibles índices únicos para todas las cuentas de Azure Cosmos DB que usan Azure Cosmos DB for MongoDB.

Período de vida (TTL)

Azure Cosmos DB solo admite un período de vida (TTL) en el nivel de colección (_ts) en la versión 3.2. Actualice a la versión 3.6 y posteriores para beneficiarse de otras formas de TTL.

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

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.

Write Concern

Algunas aplicaciones se basan en Write Concern, que especifica el número de respuestas requeridas 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.

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 manuales, lo que significa que no tiene que invocar comandos como shardCollection, addShard, balancerStart, moveChunk, etc. Solo necesita especificar la clave de partición al crear los contenedores o consultar los datos.

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.