API de Azure Cosmos DB para MongoDB: características y sintaxis que se admitenAzure Cosmos DB’s API for MongoDB: supported features and syntax

Azure Cosmos DB es un servicio de base de datos con varios modelos y de distribución global de Microsoft.Azure Cosmos DB is Microsoft's globally distributed multi-model database service. Puede comunicarse con la API de Azure Cosmos DB para MongoDB mediante cualquiera de los controladores del cliente de MongoDB de código abierto.You can communicate with the Azure Cosmos DB's API for MongoDB using any of the open source MongoDB client drivers. 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.The Azure Cosmos DB's API for MongoDB enables the use of existing client drivers by adhering to the MongoDB wire protocol.

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, indexación automática de cada campo, cifrado en reposo, copias de seguridad y mucho más.By using the Azure Cosmos DB's API for MongoDB, you can enjoy the benefits of the MongoDB you're used to, with all of the enterprise capabilities that Cosmos DB provides: global distribution, automatic sharding, availability and latency guarantees, automatic indexing of every field, encryption at rest, backups, and much more.

Compatibilidad con protocolosProtocol Support

La API de Azure Cosmos DB para MongoDB es compatible de manera predeterminada con la versión del servidor de MongoDB 3.2.The Azure Cosmos DB's API for MongoDB is compatible with MongoDB server version 3.2 by default. A continuación se enumeran los operadores admitidos y las limitaciones o excepciones.The supported operators and any limitations or exceptions are listed below. Las características o los operadores de consulta que se han agregado en la versión 3.4 de MongoDB están actualmente disponibles como una característica de versión preliminar.Features or query operators added in MongoDB version 3.4 are currently available as a preview feature. Cualquier controlador de cliente que reconozca estos protocolos podrá conectarse a la API de Azure Cosmos DB para MongoDB.Any client driver that understands these protocols should be able to connect to Azure Cosmos DB's API for MongoDB.

La canalización de agregación de MongoDB también está disponible actualmente como una característica de versión preliminar independiente.The MongoDB aggregation pipeline is also currently available as a separate preview feature.

Compatibilidad con lenguajes de consultaQuery language support

La API de Azure Cosmos DB para MongoDB proporciona una compatibilidad completa con las construcciones del lenguaje de consulta de MongoDB.Azure Cosmos DB's API for MongoDB provides comprehensive support for MongoDB query language constructs. A continuación, encontrará una lista detallada de las opciones, comandos, fases, operadores y operaciones compatibles actualmente.Below you can find the detailed list of currently supported operations, operators, stages, commands and options.

Comandos de base de datosDatabase commands

La API de Azure Cosmos DB para MongoDB admite los siguientes comandos de base de datos:Azure Cosmos DB's API for MongoDB supports the following database commands:

Comandos de operación de consulta y escrituraQuery and write operation commands

  • deletedelete
  • findfind
  • findAndModifyfindAndModify
  • getLastErrorgetLastError
  • getMoregetMore
  • insertinsert
  • updateupdate

Comandos de autenticaciónAuthentication commands

  • logoutlogout
  • authenticateauthenticate
  • getnoncegetnonce

Comandos de administraciónAdministration commands

  • dropDatabasedropDatabase
  • listCollectionslistCollections
  • dropdrop
  • createcreate
  • filemd5filemd5
  • createIndexescreateIndexes
  • listIndexeslistIndexes
  • dropIndexesdropIndexes
  • connectionStatusconnectionStatus
  • reIndexreIndex

Comandos de diagnósticoDiagnostics commands

  • buildInfobuildInfo
  • collStatscollStats
  • dbStatsdbStats
  • hostInfohostInfo
  • listDatabaseslistDatabases
  • whatsmyuriwhatsmyuri

Canalización de agregaciónAggregation pipeline

Cosmos DB es compatible con la canalización de agregación en la versión preliminar pública.Cosmos DB supports aggregation pipeline in public preview. Vea el blog de Azure para obtener instrucciones sobre cómo incorporarse a la versión preliminar pública.See the Azure blog for instructions on how to onboard to the public preview.

Comandos de agregaciónAggregation commands

  • aggregateaggregate
  • countcount
  • distinctdistinct

Fases de agregaciónAggregation stages

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

Expresiones de agregaciónAggregation expressions

Expresiones booleanasBoolean expressions

  • $and$and
  • $or$or
  • $not$not

Expresiones de conjuntoSet expressions

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

Expresiones de comparaciónComparison expressions

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

Expresiones aritméticasArithmetic expressions

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

Expresiones de cadenaString expressions

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

Expresiones de matrizArray expressions

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

Expresiones de fechaDate expressions

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

Expresiones condicionalesConditional expressions

  • $cond$cond
  • $ifNull$ifNull

Acumuladores de agregaciónAggregation accumulators

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

OperadoresOperators

Los siguientes operadores son compatibles con los correspondientes ejemplos de su uso.Following operators are supported with corresponding examples of their use. Tenga en cuenta este documento de muestra utilizada en las consultas siguientes:Consider this sample document used in the queries below:

{
  "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"
}
OperadorOperator EjemploExample
$eq$eq { "Volcano Name": { $eq: "Rainier" } } -
$gt$gt { "Elevation": { $gt: 4000 } } -
$gte$gte { "Elevation": { $gte: 4392 } } -
$lt$lt { "Elevation": { $lt: 5000 } } -
$lte$lte { "Elevation": { $lte: 5000 } } -
$ne$ne { "Elevation": { $ne: 1 } } -
$in$in { "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } } -
$nin$nin { "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } } -
$or$or { $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] } -
$and$and { $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] } -
$not$not { "Elevation": { $not: { $gt: 5000 } } } -
$nor$nor { $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] } -
$exists$exists { "Status": { $exists: true } } -
$type$type { "Status": { $type: "string" } } -
$mod$mod { "Elevation": { $mod: [ 4, 0 ] } } -
$regex$regex { "Volcano Name": { $regex: "^Rain"} } -

NotasNotes

En las consultas de $regex, las expresiones ancladas a la izquierda permiten la búsqueda de índice.In $regex queries, Left-anchored expressions allow index search. 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.However, using 'i' modifier (case-insensitivity) and 'm' modifier (multiline) causes the collection scan in all expressions. Cuando es necesario incluir '$' o '|', es mejor crear dos (o más) consultas regex.When there's a need to include '$' or '|', it is best to create two (or more) regex queries. 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$/}}).For example, given the following original query: find({x:{$regex: /^abc$/}), it has to be modified as follows: 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.The first part will use the index to restrict the search to those documents beginning with ^abc and the second part will match the exact entries. 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".The bar operator '|' acts as an "or" function - the query find({x:{$regex: /^abc|^def/}) matches the documents in which field 'x' has values that begin with "abc" or "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/}] }).To utilize the index, it's recommended to break the query into two different queries joined by the $or operator: find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] }).

Operadores de actualizaciónUpdate operators

Operadores de actualización de campoField update operators

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

Operadores de actualización de matrizArray update operators

  • $addToSet$addToSet
  • $pop$pop
  • $pullAll$pullAll
  • $pull (Nota: No se admite $pull con condición)$pull (Note: $pull with condition is not supported)
  • $pushAll$pushAll
  • $push$push
  • $each$each
  • $slice$slice
  • $sort$sort
  • $position$position

Operador de actualización bit a bitBitwise update operator

  • $bit$bit

Operadores de geoespacialesGeospatial operators

OperadorOperator EjemploExample
$geoWithin$geoWithin { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Yes
$geoIntersects$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 ] ] ] } } } } Yes
$near$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 ] ] ] } } } } Yes
$nearSphere$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Yes
$geometry$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 ] ] ] } } } } Yes
$minDistance$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } } Yes
$maxDistance$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } } Yes
$center$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } } Yes
$centerSphere$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } } Yes
$box$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } } Yes
$polygon$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 ] ] ] } } } } Yes

Ordenar operacionesSort Operations

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.When using the findOneAndUpdate operation, sort operations on a single field are supported but sort operations on multiple fields are not supported.

Operadores adicionalesAdditional operators

OperadorOperator EjemploExample NotasNotes
$all$all { "Location.coordinates": { $all: [-121.758, 46.87] } }
$elemMatch$elemMatch { "Location.coordinates": { $elemMatch: { $lt: 0 } } }
$size$size { "Location.coordinates": { $size: 2 } }
$comment$comment { "Location.coordinates": { $elemMatch: { $lt: 0 } }, $comment: "Negative values"}
$text$text No compatible.Not supported. Utilice $regex en su lugar.Use $regex instead.

Operadores no compatiblesUnsupported operators

Los operadores $where y $eval no son compatibles con Azure Cosmos DB.The $where and the $eval operators are not supported by Azure Cosmos DB.

MétodosMethods

Los siguientes métodos son compatibles:Following methods are supported:

Métodos de cursorCursor methods

MétodoMethod EjemploExample NotasNotes
cursor.sort()cursor.sort() cursor.sort({ "Elevation": -1 }) No se devuelven los documentos sin criterio de ordenación.Documents without sort key do not get returned

Índices únicosUnique indexes

Cosmos DB indexa cada campo de los documentos que se escriben en la base de datos de forma predeterminada.Cosmos DB indexes every field in documents that are written to the database by default. Los índices únicos garantizan que un campo concreto no tiene valores duplicados en todos los documentos de una colección, de forma similar en que se conserva la singularidad en la clave "_id" predeterminada.Unique indexes ensure that a specific field doesn’t have duplicate values across all documents in a collection, similar to the way uniqueness is preserved on the default "_id" key. Puede crear índices personalizados en Cosmos DB mediante el comando createIndex, incluida la restricción "unique".You can create custom indexes in Cosmos DB by using the createIndex command, including the 'unique’ constraint.

Hay disponibles índices únicos para todas las cuentas de Cosmos que usan la API de Azure Cosmos DB para MongoDB.Unique indexes are available for all Cosmos accounts using Azure Cosmos DB's API for MongoDB.

Período de vida (TTL)Time-to-live (TTL)

Cosmos DB admite un período de vida (TTL) en función de la marca de tiempo del documento.Cosmos DB supports a time-to-live (TTL) based on the timestamp of the document. TTL se puede habilitar para las colecciones mediante Azure Portal.TTL can be enabled for collections by going to the Azure portal.

Administración de usuarios y rolesUser and role management

Cosmos DB no admite aún usuarios y roles.Cosmos DB does not yet support users and roles. Sin embargo, Cosmos DB admite el control de acceso basado en roles (RBAC) y claves/contraseñas de solo lectura y escritura que pueden obtenerse a través de Azure Portal (página de cadena de conexión).However, Cosmos DB supports role based access control (RBAC) and read-write and read-only passwords/keys that can be obtained through the Azure portal (Connection String page).

ReplicaciónReplication

Cosmos DB admite la replicación automática y nativa en las capas más inferiores.Cosmos DB supports automatic, native replication at the lowest layers. Esta lógica se amplía para lograr también una replicación global de baja latencia.This logic is extended out to achieve low-latency, global replication as well. Cosmos DB no es compatible con comandos de replicación manuales.Cosmos DB does not support manual replication commands.

Write ConcernWrite Concern

Algunas aplicaciones se basan en Write Concern, que especifica el número de respuestas requeridas durante una operación de escritura.Some applications rely on a Write Concern which specifies the number of responses required during a write operation. 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.Due to how Cosmos DB handles replication in the background all writes are all automatically Quorum by default. Cualquier nivel de Write Concern especificado por el código de cliente se ignora.Any write concern specified by the client code is ignored. Más información en el artículo sobre el Uso de los niveles de coherencia para maximizar la disponibilidad y el rendimiento.Learn more in Using consistency levels to maximize availability and performance.

ParticionamientoSharding

Azure Cosmos DB admite el particionamiento de servidor automático.Azure Cosmos DB supports automatic, server-side sharding. Administra la creación de particiones, la ubicación y el equilibrio de forma automática.It manages shard creation, placement, and balancing automatically. Azure Cosmos DB no admite comandos de particionamiento manual, lo que significa que no tiene que invocar comandos como shardCollection, addShard, balancerStart, moveChunk, etc. Solo tiene que especificar la clave de partición al crear los contenedores o consultar los datos.Azure Cosmos DB does not support manual sharding commands, which means you don't have to invoke commands such as shardCollection, addShard, balancerStart, moveChunk etc. You only need to specify the shard key while creating the containers or querying the data.

Pasos siguientesNext steps

  • Aprenda a usar Studio 3T con la API de Azure Cosmos DB para MongoDB.Learn how to use Studio 3T with Azure Cosmos DB's API for MongoDB.
  • Aprenda a usar Robo 3T con la API de Azure Cosmos DB para MongoDB.Learn how to use Robo 3T with Azure Cosmos DB's API for MongoDB.
  • Explore ejemplos de MongoDB con la API de Azure Cosmos DB para MongoDB.Explore MongoDB samples with Azure Cosmos DB's API for MongoDB.

Nota: En este artículo se describe una característica de Azure Cosmos DB que proporciona compatibilidad del protocolo de conexión con bases de datos de MongoDB. Microsoft no ejecuta bases de datos de MongoDB que ofrezcan este servicio. Azure Cosmos DB no está afiliado a MongoDB, Inc.Note: This article describes a feature of Azure Cosmos DB that provides wire protocol compatibility with MongoDB databases. Microsoft does not run MongoDB databases to provide this service. Azure Cosmos DB is not affiliated with MongoDB, Inc.