

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# APIsMongoDB, operaciones y tipos de datos compatibles en Amazon DocumentDB
<a name="mongo-apis"></a>

Amazon DocumentDB (compatible con MongoDB) es un servicio de base de datos de documentos rápido, completamente administrado, de alta disponibilidad y escala ajustable que admite cargas de trabajo de MongoDB. Amazon DocumentDB es compatible con MongoDB 3.6, 4.0, 5.0 y 8.0. APIs Esta sección muestra la funcionalidad admitida. Para obtener asistencia sobre el uso de APIs MongoDB y los controladores, consulte los foros de la comunidad de MongoDB. Para obtener asistencia con el servicio Amazon DocumentDB, póngase en contacto con el equipo de AWS soporte correspondiente. Para las diferencias funcionales entre Amazon DocumentDB y MongoDB, consulte [Diferencias funcionales: Amazon DocumentDB y MongoDB](functional-differences.md). 

Los comandos y operadores de MongoDB que son solo para uso interno o que no se aplican a un servicio completamente administrado no se admiten ni están incluidos en la lista de funcionalidades admitidas.

Hemos agregado más de 50 capacidades adicionales desde el lanzamiento y seguiremos trabajando con versiones anteriores de nuestros clientes para ofrecer las capacidades que necesitan. Para obtener información sobre los lanzamientos más recientes, consulte [Anuncios de Amazon DocumentDB](https://aws.amazon.com/documentdb/resources/).

Si hay una característica que no es compatible que desea que creemos, háganoslo saber enviando un correo electrónico con su ID de cuenta, las características solicitadas y el caso de uso al [equipo de servicio de Amazon DocumentDB](mailto:documentdb-feature-request@amazon.com).
+ [Comandos de la base de datos](#mongo-apis-database)
+ [Operadores de consulta y proyección](#mongo-apis-query)
+ [Operadores de actualización](#mongo-apis-update)
+ [Geospatial (Geoespacial)](#mongo-apis-geospatial)
+ [Métodos de cursor](#mongo-apis-cursor)
+ [Operadores de canalización de agregación](#mongo-apis-aggregation-pipeline)
+ [Tipos de datos](#mongo-apis-data-types)
+ [Índices](#mongo-apis-indexes)

## Comandos de la base de datos
<a name="mongo-apis-database"></a>

**Topics**
+ [Comandos administrativos](#mongo-apis-dababase-administrative)
+ [Agregación](#mongo-apis-dababase-aggregation)
+ [Autenticación](#mongo-apis-dababase-authentication)
+ [Comandos de diagnóstico](#mongo-apis-dababase-diagnostics)
+ [Operaciones de consulta y escritura](#mongo-apis-dababase-query-write)
+ [Comandos para la administración de roles](#mongo-apis-database-role-management)
+ [Comandos de sesiones](#mongo-apis-dababase-sessions)
+ [Administración de usuarios](#mongo-apis-dababase-user-management)
+ [Comandos de partición](#mongo-apis-dababase-sharding)

### Comandos administrativos
<a name="mongo-apis-dababase-administrative"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  Colecciones limitadas  |  No  |  No  |  No  |  No  |  No  | 
|  cloneCollectionAsTapado  |  No  |  No  |  No  |  No  |  No  | 
|  collMod  |  Parcial  |  Parcial  |  Parcial  |  Parcial  |  Parcial  | 
|  CollMod: expireAfterSeconds  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  convertToCapped  |  No  |  No  |  No  |  No  |  No  | 
|  copydb  |  No  |  No  |  No  |  No  |  No  | 
|  crear  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  createView  |  No  |  No  |  No  |  Sí  |  No  | 
|  createIndexes  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  currentOp  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  drop  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  dropDatabase  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  dropIndexes  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  filemd5  |  No  |  No  |  No  |  No  |  No  | 
|  getAuditConfig  |  No  |  Sí  |  Sí  |  Sí  |  No  | 
|  killCursors  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  killOp  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  listCollections\$1  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  listDatabases  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  listIndexes  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  reIndex  |  No  |  No  |  Sí  |  Sí  |  No  | 
|  renameCollection  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  setAuditConfig  |  No  |  Sí  |  Sí  |  Sí  |  No  | 

\$1 No se admite la clave `type` de la opción de filtro.

### Agregación
<a name="mongo-apis-dababase-aggregation"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  aggregate  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  count  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  distinct  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  mapReduce  |  No  |  No  |  No  |  Sí  |  No  | 

### Autenticación
<a name="mongo-apis-dababase-authentication"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  authenticate  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  logout  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Comandos de diagnóstico
<a name="mongo-apis-dababase-diagnostics"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  buildInfo  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  collStats  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  connPoolStats  |  No  |  No  |  No  |  No  |  No  | 
|  connectionStatus  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  dataSize  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  dbHash  |  No  |  No  |  No  |  No  |  No  | 
|  dbStats  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  explain  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  explain: executionStats  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Características de    |  No  |  No  |  No  |  No  |  No  | 
|  hostInfo  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  listCommands  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  profiler  |  [Sí](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  [Sí](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  [Sí](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  [Sí](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  No  | 
|  serverStatus  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  top  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operaciones de consulta y escritura
<a name="mongo-apis-dababase-query-write"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  Change streams  |  [Sí](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  [Sí](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  [Sí](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  [Sí](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  No  | 
|  eliminar  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  find  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  findAndModify  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  getLastError  |  No  |  No  |  No  |  No  |  No  | 
|  getMore  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  getPrevError  |  No  |  No  |  No  |  No  |  No  | 
|  GridFS  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  inserción  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  parallelCollectionScan  |  No  |  No  |  No  |  No  |  No  | 
|  resetError  |  No  |  No  |  No  |  No  |  No  | 
|  actualización  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  ReplaceOne  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Comandos para la administración de roles
<a name="mongo-apis-database-role-management"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  createRole  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  dropAllRolesFromDatabase  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  dropRole  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  grantRolesToRol  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  revokeRolesFromRol  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  revokePrivilegesFromRol  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  rolesInfo  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  updateRole  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 

### Comandos de sesiones
<a name="mongo-apis-dababase-sessions"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  Abortar transacción  |  No  |  Sí  |  Sí  |  Sí  |  No  | 
|  commitTransaction  |  No  |  Sí  |  Sí  |  Sí  |  No  | 
|  Finalizar sesiones  |  No  |  No  |  No  |  No  |  No  | 
|   killAllSessions  |  No  |  Sí  |  Sí  |  Sí  |  No  | 
|  killAllSessionsByPattern  |  No  |  No  |  No  |  No  |  No  | 
|  Mata a Sessions  |  No  |  Sí  |  Sí  |  Sí  |  No  | 
|  Actualizar sesiones  |  No  |  No  |  No  |  No  |  No  | 
|  StartSession  |  No  |  Sí  |  Sí  |  Sí  |  No  | 

### Administración de usuarios
<a name="mongo-apis-dababase-user-management"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  createUser  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  dropAllUsersFromDatabase  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  dropUser  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  grantRolesToUser  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  revokeRolesFromUser  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  updateUser  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  usersInfo  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Comandos de partición
<a name="mongo-apis-dababase-sharding"></a>


| Comando | Clúster elástico | 
| --- | --- | 
|  abortReshardCollection  |  No  | 
|  Añadir partición  |  No  | 
|  addShardToZona  |  No  | 
|  balancerCollectionStatus  |  No  | 
|  Balancer Start  |  No  | 
|  Estado del equilibrador  |  No  | 
|  BalancerStop  |  No  | 
|  checkShardingIndex  |  No  | 
|  clearJumboFlag  |  No  | 
|  cleanupOrphaned  |  No  | 
|  cleanupReshardCollection  |  No  | 
|  commitReshardCollection  |  No  | 
|  Habilitar Sharding  |  Sí  | 
|  flushRouterConfig  |  No  | 
|  getShardMap  |  No  | 
|  getShardVersion  |  No  | 
|  isdbgrid  |  No  | 
|  ListShards  |  No  | 
|  Clave mediana  |  No  | 
|  Mueva Chunk  |  No  | 
|  Mueva el modo principal  |  No  | 
|  MergeChunks  |  No  | 
|  refineCollectionShardClave  |  No  | 
|  Elimina Hard  |  No  | 
|  removeShardFromZona  |  No  | 
|  Colección ReShard  |  No  | 
|  setAllowMigrations  |  No  | 
|  setShardVersion  |  No  | 
|  Colección Shard  |  Sí  | 
|  Estado de partición  |  No  | 
|  dividir  |  No  | 
|  Vector dividido  |  No  | 
|  UnsetSharding  |  No  | 
|  updateZoneKeyAlcance  |  No  | 

## Operadores de consulta y proyección
<a name="mongo-apis-query"></a>

**Topics**
+ [Operadores de matrices](#mongo-apis-query-array-operators)
+ [Operadores Bitwise](#mongo-apis-query-bitwise-operators)
+ [Operador de comentarios](#mongo-apis-query-comment-operator)
+ [Operadores de comparación](#mongo-apis-query-comparison-operators)
+ [Operadores de elementos](#mongo-apis-query-element-operators)
+ [Operadores de consulta de evaluación](#mongo-apis-query-evaluation-operators)
+ [Logical operators (Operadores lógicos)](#mongo-apis-query-logical-operators)
+ [Operadores de proyección](#mongo-apis-projection-operators)

### Operadores de matrices
<a name="mongo-apis-query-array-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1all](all.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1elemMatch](elemMatch.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1size](size-query.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores Bitwise
<a name="mongo-apis-query-bitwise-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1bitsAllSet](bitsAllSet.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1bitsAnySet](bitsAnySet.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1bitsAllClear](bitsAllClear.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1bitsAnyClear](bitsAnyClear.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operador de comentarios
<a name="mongo-apis-query-comment-operator"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1comment](comment.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores de comparación
<a name="mongo-apis-query-comparison-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1eq](eq.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1gt](gt.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1gte](gte.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1in](in.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1lt](lt.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1lte](lte.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1ne](ne.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1nin](nin.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores de elementos
<a name="mongo-apis-query-element-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1exists](exists.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1type](type.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores de consulta de evaluación
<a name="mongo-apis-query-evaluation-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1expr](expr.md)  |  No  |  Sí  |  Sí  |  Sí  |  No  | 
|  [\$1jsonSchema](jsonSchema.md)  |  No  |  Sí  |  Sí  |  Sí  |  No  | 
|  [\$1mod](mod-query.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1regex](regex.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1text](text.md)  |  No  |  No  |  Sí  |  Sí  |  No  | 
|  \$1where  |  No  |  No  |  No  |  No  |  No  | 

### Logical operators (Operadores lógicos)
<a name="mongo-apis-query-logical-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1and](and.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1nor](nor.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1not](not.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1or](or.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores de proyección
<a name="mongo-apis-projection-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1](dollar-projection.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1elemMatch](elemMatch.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1meta](meta.md)  |  No  |  No  |  Sí  |  Sí  |  No  | 
|  [\$1slice](slice-projection.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

## Operadores de actualización
<a name="mongo-apis-update"></a>

**Topics**
+ [Operadores de matrices](#mongo-apis-update-array)
+ [Operadores Bitwise](#mongo-apis-update-bitwise)
+ [Operadores de campo](#mongo-apis-update-field)
+ [Modificadores de actualización](#mongo-apis-update-modifiers)

### Operadores de matrices
<a name="mongo-apis-update-array"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1](dollar-update.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1[]](dollarBrackets-update.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1[<identifier>]](dollarIdentifier-update.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1addToSet](addToSet.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1pop](pop.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1pullAll](pullAll.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1pull](pull.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1push](push.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores Bitwise
<a name="mongo-apis-update-bitwise"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1bit](bit.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores de campo
<a name="mongo-apis-update-field"></a>


| Operador | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1currentDate](currentDate.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1inc](inc.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1max](max-update.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1min](min-update.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1mul](mul.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1rename](rename.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1set](set-update.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1setOnInsert](setOnInsert.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1unset](unset-update.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Modificadores de actualización
<a name="mongo-apis-update-modifiers"></a>


| Operador | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1each](each.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1position](position.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1slice](slice-update.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1sort](sort-update.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

## Geospatial (Geoespacial)
<a name="mongo-apis-geospatial"></a>

### Especificadores de geometría
<a name="mongo-apis-geospatial-geometry-specifiers"></a>


| Selectores de consultas | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1box  |  No  |  No  |  No  |  No  |  No  | 
|  \$1center  |  No  |  No  |  No  |  No  |  No  | 
|  \$1centerSphere  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1geometry](geometry.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1maxDistance](maxDistance.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1minDistance](minDistance.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1nearSphere](nearSphere.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  \$1polygon  |  No  |  No  |  No  |  No  |  No  | 
|  \$1uniqueDocs  |  No  |  No  |  No  |  No  |  No  | 

### Selectores de consultas
<a name="mongo-apis-geospatial-query-selectors"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1geoIntersects](geoIntersects.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1geoWithin](geoWithin.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1near](near.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1nearSphere](nearSphere.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  \$1polygon  |  No  |  No  |  No  |  No  |  No  | 
|  \$1uniqueDocs  |  No  |  No  |  No  |  No  |  No  | 

## Métodos de cursor
<a name="mongo-apis-cursor"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  cursor.batchSize()  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  cursor.close()  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  cursor.collation()  |  No  |  No  |  No  |  Sí  |  No  | 
|  cursor.comment()  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  cursor.count()  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  cursor.explain()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.forEach()  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  cursor.hasNext()  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  cursor.hint()  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí\$1  | 
|  cursor.isClosed()  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  cursor.isExhausted()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.itcount()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.limit()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.map()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.max()  |  No  |  No  |  No  |  No  |  No  | 
|  cursor.maxScan()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.maxTimeMS()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.min()  |  No  |  No  |  No  |  No  |  No  | 
|  cursor.next()  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  cursor. noCursorTimeout()  |  No  |  No  |  No  |  No  |  No  | 
|  cursor. objsLeftInBatch ()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.pretty()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.readConcern()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.readPref()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.returnKey()  |  No  |  No  |  No  |  No  |  No  | 
|  cursor. showRecordId()  |  No  |  No  |  No  |  No  |  No  | 
|  cursor.size()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.skip()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.sort()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  cursor.tailable()  |  No  |  No  |  No  |  No  |  No  | 
|  cursor.toArray()  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 

\$1 El índice `hint` es compatible con las expresiones de índice. Por ejemplo, `db.foo.find().hint({x:1})`.

## Operadores de canalización de agregación
<a name="mongo-apis-aggregation-pipeline"></a>

**Topics**
+ [Expresiones de acumulación](#mongo-apis-aggregation-pipeline-accumulator-expressions)
+ [Operadores aritméticos](#mongo-apis-aggregation-pipeline-arithmetic)
+ [Operadores de matrices](#mongo-apis-aggregation-pipeline-array)
+ [Operadores booleanos](#mongo-apis-aggregation-pipeline-boolean)
+ [Operadores de comparación](#mongo-apis-aggregation-pipeline-comparison)
+ [Operadores de expresiones condicionales](#mongo-apis-aggregation-pipeline-conditional)
+ [Operador de tipos de datos](#mongo-apis-aggregation-pipeline-data-type)
+ [Operador de tamaño de datos](#mongo-apis-aggregation-pipeline-data-size)
+ [Operadores de fechas](#mongo-apis-aggregation-pipeline-date)
+ [Operador literal](#mongo-apis-aggregation-pipeline-literal)
+ [Operador de combinación](#mongo-apis-aggregation-pipeline-merge)
+ [Operador natural](#mongo-apis-aggregation-pipeline-natural)
+ [Operadores de establecimiento](#mongo-apis-aggregation-pipeline-set)
+ [Operadores de etapa](#mongo-apis-aggregation-pipeline-stage)
+ [Operadores de cadena](#mongo-apis-aggregation-pipeline-string)
+ [Variables del sistema](#mongo-apis-aggregation-pipeline-system-variables)
+ [Operador de búsqueda de texto](#mongo-apis-aggregation-pipeline-text-search)
+ [Operadores de conversión de tipos](#mongo-apis-aggregation-pipeline-type)
+ [Operadores de variables](#mongo-apis-aggregation-pipeline-variable)
+ [Operadores misceláneos](#mongo-apis-aggregation-pipeline-misc)

### Expresiones de acumulación
<a name="mongo-apis-aggregation-pipeline-accumulator-expressions"></a>


| Expression | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1 acumulador  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1addToSet](addToSet-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1avg](avg.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1count](count.md)  |  -  |  -  |  No  |  No  |  No  | 
|  \$1covariancePop  |  No  |  No  |  No  |  No  |  No  | 
|  \$1covarianceSamp  |  No  |  No  |  No  |  No  |  No  | 
|  \$1denseRank  |  No  |  No  |  No  |  No  |  No  | 
|  \$1derivative  |  No  |  No  |  No  |  No  |  No  | 
|  \$1documentNumber  |  No  |  No  |  No  |  No  |  No  | 
|  \$1expMovingAvg  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1first](first.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  \$1integral  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1last](last.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1max](max.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1min](min.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1push](push-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  \$1rank  |  No  |  No  |  No  |  No  |  No  | 
|  \$1shift  |  No  |  No  |  No  |  No  |  No  | 
|  \$1stdDevPop  |  No  |  No  |  No  |  No  |  No  | 
|  \$1stdDevSamp  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1sum](sum.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores aritméticos
<a name="mongo-apis-aggregation-pipeline-arithmetic"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1abs](abs.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1add](add.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1ceil](ceil.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1divide](divide.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1exp](exp.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1floor](floor.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1ln](ln.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1log](log.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1log10](log10.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1mod](mod.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1multiply](multiply.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1pow](pow.md)  |  No  |  No  |  No  |  Sí  |  No  | 
|  \$1round  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1sqrt](sqrt.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1subtract](subtract.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  \$1trunc  |  No  |  No  |  No  |  No  |  No  | 

### Operadores de matrices
<a name="mongo-apis-aggregation-pipeline-array"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1arrayElemAt](arrayElemAt.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1arrayToObject](arrayToObject.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1concatArrays](concatArrays.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1filter](filter.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1first](first.md)  |  -  |  -  |  Sí  |  Sí  |  No  | 
|  [\$1in](in-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1indexOfArray](indexOfArray.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1isArray](isArray.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1last](last.md)  |  -  |  -  |  Sí  |  Sí  |  No  | 
|  [\$1objectToArray](objectToArray.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1range](range.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1reverseArray](reverseArray.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1reduce](reduce.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1size](size.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1slice](slice.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1zip](zip.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores booleanos
<a name="mongo-apis-aggregation-pipeline-boolean"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1and](and-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1not](not-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1or](or-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores de comparación
<a name="mongo-apis-aggregation-pipeline-comparison"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1cmp](cmp.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1eq](eq-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1gt](gt-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1gte](gte-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1lt](lt-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1lte](lte-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1ne](ne-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores de expresiones condicionales
<a name="mongo-apis-aggregation-pipeline-conditional"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1cond](cond.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1ifNull](ifNull.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1switch](switch.md)  |  No  |  Sí  |  Sí  |  Sí  |  No  | 

### Operador de tipos de datos
<a name="mongo-apis-aggregation-pipeline-data-type"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1type](type-aggregation.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operador de tamaño de datos
<a name="mongo-apis-aggregation-pipeline-data-size"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1binarySize  |  -  |  -  |  No  |  No  |  No  | 
|  \$1bsonSize  |  -  |  -  |  No  |  No  |  No  | 

### Operadores de fechas
<a name="mongo-apis-aggregation-pipeline-date"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1dateAdd](dateAdd.md)  |  No  |  No  |  Sí  |  Sí  |  Sí  | 
|  [\$1dateDiff](dateDiff.md)  |  -  |  -  |  Sí  |  Sí  |  No  | 
|  \$1dateFromParts  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1dateFromString](dateFromString.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1dateSubtract](dateSubtract.md)  |  No  |  No  |  Sí  |  Sí  |  Sí  | 
|  \$1dateToParts  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1dateToString](dateToString.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1dateTrunc](dateTrunc.md)  |  -  |  -  |  No  |  Sí  |  No  | 
|  [\$1dayOfMonth](dayOfMonth.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1dayOfWeek](dayOfWeek.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1dayOfYear](dayOfYear.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1hour](hour.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1 isoDayOf Semana](isoDayOfWeek.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1isoWeek](isoWeek.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1isoWeekYear](isoWeekYear.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1millisecond](millisecond.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1minute](minute.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1month](month.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1second](second.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1week](week.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1year](year.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operador literal
<a name="mongo-apis-aggregation-pipeline-literal"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1literal](literal.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operador de combinación
<a name="mongo-apis-aggregation-pipeline-merge"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1mergeObjects](mergeObjects.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operador natural
<a name="mongo-apis-aggregation-pipeline-natural"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1natural](natural.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores de establecimiento
<a name="mongo-apis-aggregation-pipeline-set"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1allElementsTrue](allElementsTrue.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1anyElementTrue](anyElementTrue.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1setDifference](setDifference.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1setEquals](setEquals.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1setIntersection](setIntersection.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1setIsSubset](setIsSubset.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1setUnion](setUnion.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  \$1setWindowFields  |  No  |  No  |  No  |  No  |  No  | 

### Operadores de etapa
<a name="mongo-apis-aggregation-pipeline-stage"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1addFields](addFields.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1bucket](bucket.md)  |  No  |  No  |  No  |  Sí  |  No  | 
|  \$1bucketAuto  |  No  |  No  |  No  |  No  | 
|  [\$1changeStream](changeStream.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  [\$1collStats](collStats.md)  |  No  |  Sí  |  Sí  |  Sí  |  No  | 
|  [\$1count](count.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1currentOp](currentOp.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  \$1facet  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1geoNear](geoNear.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  \$1graphLookup  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1group](group.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1indexStats](indexStats.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1limit](limit.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  \$1listLocalSessions  |  No  |  No  |  No  |  No  |  No  | 
|  \$1listSessions  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1lookup](lookup.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1match](match.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1merge](merge.md)  |  -  |  -  |  No  |  Sí  |  No  | 
|  [\$1out](out.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  No  | 
|  \$1planCacheStats  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1project](project.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1redact](redact.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1replaceRoot](replaceRoot.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1sample](sample.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1set](set-stage.md)  |  -  |  -  |  No  |  Sí  |  No  | 
|  \$1setWindowFields  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1skip](skip.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1sort](sort.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  \$1sortByCount  |  No  |  No  |  No  |  No  |  No  | 
|  \$1UnionWith  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1unset](unset-stage.md)  |  -  |  -  |  No  |  Sí  |  No  | 
|  [\$1unwind](unwind.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1 Reemplazar con](replaceWith.md)  |  No  |  No  |  No  |  Sí  |  No  | 
|  [\$1 VectorSearch](vectorSearch.md)  |  No  |  No  |  No  |  Sí  |  No  | 

### Operadores de cadena
<a name="mongo-apis-aggregation-pipeline-string"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1concat](concat.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1indexOfBytes](indexOfBytes.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1indexOfCP](indexOfCP.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1ltrim](ltrim.md)  |  No  |  Sí  |  Sí  |  Sí  |  No  | 
|  [\$1regexFind](regexFind.md)  |  -  |  -  |  Sí  |  Sí  |  No  | 
|  [\$1regexFindAll](regexFindAll.md)  |  -  |  -  |  Sí  |  Sí  |  No  | 
|  [\$1 RegexMatch](regexMatch.md)  |  -  |  -  |  Sí  |  Sí  |  No  | 
|  [\$1ReplaceAll](replaceAll.md)  |  -  |  -  |  Sí  |  Sí  |  No  | 
|  [\$1 ReplaceOne](replaceOne.md)  |  -  |  -  |  Sí  |  Sí  |  No  | 
|  [\$1rtrim](rtrim.md)  |  No  |  Sí  |  Sí  |  Sí  |  No  | 
|  [\$1split](split.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1strcasecmp](strcasecmp.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1strLenBytes](strLenBytes.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1strLenCP](strLenCP.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1substr](substr.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1substrBytes](substrBytes.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1substrCP](substrCP.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1toLower](toLower.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1toUpper](toUpper.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1trim](trim.md)  |  No  |  Sí  |  Sí  |  Sí  |  No  | 

### Variables del sistema
<a name="mongo-apis-aggregation-pipeline-system-variables"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1\$1CURRENT  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1\$1DESCEND](DESCEND.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1\$1KEEP](KEEP.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1\$1PRUNE](PRUNE.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  \$1\$1REMOVE  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1 RAÍZ](ROOT.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operador de búsqueda de texto
<a name="mongo-apis-aggregation-pipeline-text-search"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1meta](meta-aggregation.md)  |  No  |  No  |  Sí  |  Sí  |  No  | 
|  [\$1search](search.md)  |  No  |  No  |  Sí  |  Sí  |  No  | 

### Operadores de conversión de tipos
<a name="mongo-apis-aggregation-pipeline-type"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1convert](convert.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  \$1es un número  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1 a Bool](toBool.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1toDate](toDate.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1 a Decimal](toDecimal.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1 a doble](toDouble.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1toInt](toInt.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1 a Long](toLong.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1toObjectId](toObjectId.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1toString](toString.md)  |  No  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores de variables
<a name="mongo-apis-aggregation-pipeline-variable"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1let](let.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  [\$1map](map.md)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 

### Operadores misceláneos
<a name="mongo-apis-aggregation-pipeline-misc"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1getField  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1rand](rand.md)  |  -  |  -  |  No  |  Sí  |  No  | 
|  \$1sampleRate  |  -  |  -  |  No  |  No  |  No  | 

## Tipos de datos
<a name="mongo-apis-data-types"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  32-bit Integer (int)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Entero de 64 bits (largo)  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Matriz  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Datos Binary  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Booleano  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Date  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  DBPointer  |  No  |  No  |  No  |  No  |  No  | 
|  DBRefs  |  No  |  No  |  No  |  No  |  No  | 
|  Decimal128  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Double  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  JavaScript  |  No  |  No  |  No  |  No  |  No  | 
|  JavaScript(con alcance)  |  No  |  No  |  No  |  No  |  No  | 
|  MaxKey  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  MinKey  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Nulo  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Objeto  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  ObjectId  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Expresión regular  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Cadena  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Símbolo  |  No  |  No  |  No  |  No  |  No  | 
|  Timestamp  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Sin definir  |  No  |  No  |  No  |  No  |  No  | 

## Índices y propiedades de índices
<a name="mongo-apis-index"></a>

**Topics**
+ [Índices](#mongo-apis-indexes)
+ [Propiedades de índices](#mongo-apis-index-properties)

### Índices
<a name="mongo-apis-indexes"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  2dsphere  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Índice 2d  |  No  |  No  |  No  |  No  |  No  | 
|  Índice compuesto  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Índice hash  |  No  |  No  |  No  |  No  |  No  | 
|  Índice de varias claves  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Índice de campo único  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Índice de texto  |  No  |  No  |  Sí  |  Sí  |  No  | 
|  Comodín  |  No  |  No  |  No  |  No  |  No  | 

### Propiedades de índices
<a name="mongo-apis-index-properties"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Clúster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  Introducción  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  No distingue entre mayúsculas y minúsculas  |  No  |  No  |  No  |  Sí  |  No  | 
|  Oculto  |  No  |  No  |  No  |  No  |  No  | 
|  Parcial  |  No  |  No  |  Sí  |  Sí  |  No  | 
|  Sparse  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Texto  |  No  |  No  |  Sí  |  Sí  |  No  | 
|  TTL  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Unique  |  Sí  |  Sí  |  Sí  |  Sí  |  Sí  | 
|  Vector  |  No  |  No  |  Sí  |  Sí  |  No  | 

Para obtener información detallada sobre operadores específicos de MongoDB, consulte los siguientes temas:
+ [Operadores de canalización de agregación](mongo-apis-aggregation-pipeline-operators.md)
+ [Geospatial (Geoespacial)](mongo-apis-geospatial-operators.md)
+ [Operadores de proyección](#mongo-apis-projection-operators)
+ [Operadores de actualización](mongo-apis-update-operators.md)

# Operadores de canalización de agregación
<a name="mongo-apis-aggregation-pipeline-operators"></a>

En esta sección se proporciona información detallada sobre los operadores de canalización de agregación compatibles con Amazon DocumentDB.

**Topics**
+ [\$1\$1DESCEND](DESCEND.md)
+ [\$1\$1KEEP](KEEP.md)
+ [\$1\$1PRUNE](PRUNE.md)
+ [\$1 RAÍZ](ROOT.md)
+ [\$1abs](abs.md)
+ [\$1add](add.md)
+ [\$1addToSet](addToSet-aggregation.md)
+ [\$1addFields](addFields.md)
+ [\$1allElementsTrue](allElementsTrue.md)
+ [\$1and](and-aggregation.md)
+ [\$1anyElementTrue](anyElementTrue.md)
+ [\$1arrayElemAt](arrayElemAt.md)
+ [\$1arrayToObject](arrayToObject.md)
+ [\$1avg](avg.md)
+ [\$1bucket](bucket.md)
+ [\$1ceil](ceil.md)
+ [\$1changeStream](changeStream.md)
+ [\$1cmp](cmp.md)
+ [\$1collStats](collStats.md)
+ [\$1concat](concat.md)
+ [\$1concatArrays](concatArrays.md)
+ [\$1cond](cond.md)
+ [\$1convert](convert.md)
+ [\$1count](count.md)
+ [\$1currentOp](currentOp.md)
+ [\$1dateAdd](dateAdd.md)
+ [\$1dateDiff](dateDiff.md)
+ [\$1dateFromString](dateFromString.md)
+ [\$1dateSubtract](dateSubtract.md)
+ [\$1dateToString](dateToString.md)
+ [\$1dateTrunc](dateTrunc.md)
+ [\$1dayOfMonth](dayOfMonth.md)
+ [\$1dayOfWeek](dayOfWeek.md)
+ [\$1dayOfYear](dayOfYear.md)
+ [\$1divide](divide.md)
+ [\$1eq](eq-aggregation.md)
+ [\$1exp](exp.md)
+ [\$1filter](filter.md)
+ [\$1first](first.md)
+ [\$1floor](floor.md)
+ [\$1geoNear](geoNear.md)
+ [\$1group](group.md)
+ [\$1gt](gt-aggregation.md)
+ [\$1gte](gte-aggregation.md)
+ [\$1hour](hour.md)
+ [\$1ifNull](ifNull.md)
+ [\$1in](in-aggregation.md)
+ [\$1indexOfArray](indexOfArray.md)
+ [\$1indexOfBytes](indexOfBytes.md)
+ [\$1indexOfCP](indexOfCP.md)
+ [\$1indexStats](indexStats.md)
+ [\$1isArray](isArray.md)
+ [\$1 isoDayOf Semana](isoDayOfWeek.md)
+ [\$1isoWeek](isoWeek.md)
+ [\$1isoWeekYear](isoWeekYear.md)
+ [\$1last](last.md)
+ [\$1let](let.md)
+ [\$1limit](limit.md)
+ [\$1literal](literal.md)
+ [\$1ln](ln.md)
+ [\$1log](log.md)
+ [\$1log10](log10.md)
+ [\$1lt](lt-aggregation.md)
+ [\$1lte](lte-aggregation.md)
+ [\$1lookup](lookup.md)
+ [\$1ltrim](ltrim.md)
+ [\$1map](map.md)
+ [\$1match](match.md)
+ [\$1max](max.md)
+ [\$1meta](meta-aggregation.md)
+ [\$1merge](merge.md)
+ [\$1mergeObjects](mergeObjects.md)
+ [\$1millisecond](millisecond.md)
+ [\$1min](min.md)
+ [\$1minute](minute.md)
+ [\$1mod](mod.md)
+ [\$1month](month.md)
+ [\$1multiply](multiply.md)
+ [\$1natural](natural.md)
+ [\$1ne](ne-aggregation.md)
+ [\$1not](not-aggregation.md)
+ [\$1objectToArray](objectToArray.md)
+ [\$1or](or-aggregation.md)
+ [\$1out](out.md)
+ [\$1pow](pow.md)
+ [\$1push](push-aggregation.md)
+ [\$1project](project.md)
+ [\$1rand](rand.md)
+ [\$1range](range.md)
+ [\$1redact](redact.md)
+ [\$1reduce](reduce.md)
+ [\$1regexFind](regexFind.md)
+ [\$1regexFindAll](regexFindAll.md)
+ [\$1 RegexMatch](regexMatch.md)
+ [\$1ReplaceAll](replaceAll.md)
+ [\$1 ReplaceOne](replaceOne.md)
+ [\$1replaceRoot](replaceRoot.md)
+ [\$1 Reemplazar con](replaceWith.md)
+ [\$1reverseArray](reverseArray.md)
+ [\$1rtrim](rtrim.md)
+ [\$1sample](sample.md)
+ [\$1search](search.md)
+ [\$1second](second.md)
+ [\$1set](set-stage.md)
+ [\$1setDifference](setDifference.md)
+ [\$1setEquals](setEquals.md)
+ [\$1setIntersection](setIntersection.md)
+ [\$1setIsSubset](setIsSubset.md)
+ [\$1setUnion](setUnion.md)
+ [\$1skip](skip.md)
+ [\$1slice](slice.md)
+ [\$1size](size.md)
+ [\$1sort](sort.md)
+ [\$1split](split.md)
+ [\$1sqrt](sqrt.md)
+ [\$1strLenBytes](strLenBytes.md)
+ [\$1strLenCP](strLenCP.md)
+ [\$1strcasecmp](strcasecmp.md)
+ [\$1substr](substr.md)
+ [\$1substrBytes](substrBytes.md)
+ [\$1substrCP](substrCP.md)
+ [\$1subtract](subtract.md)
+ [\$1sum](sum.md)
+ [\$1switch](switch.md)
+ [\$1 a Bool](toBool.md)
+ [\$1toDate](toDate.md)
+ [\$1 a Decimal](toDecimal.md)
+ [\$1 a doble](toDouble.md)
+ [\$1toInt](toInt.md)
+ [\$1 a Long](toLong.md)
+ [\$1toLower](toLower.md)
+ [\$1toObjectId](toObjectId.md)
+ [\$1toString](toString.md)
+ [\$1toUpper](toUpper.md)
+ [\$1trim](trim.md)
+ [\$1type](type-aggregation.md)
+ [\$1unset](unset-stage.md)
+ [\$1unwind](unwind.md)
+ [\$1 VectorSearch](vectorSearch.md)
+ [\$1week](week.md)
+ [\$1year](year.md)
+ [\$1zip](zip.md)

# \$1\$1DESCEND
<a name="DESCEND"></a>

El `$$DESCEND` operador de Amazon DocumentDB es un operador de matriz posicional especial que se utiliza en la `$redact` fase de canalización. Indica a la canalización de agregación que descienda al documento actual y procese todos los campos, independientemente de su nivel de anidación.

Cuando la `$redact` etapa se encuentre con el `$$DESCEND` operador, mantendrá visibles todos los campos del documento actual y los procesará más adelante. Esto resulta útil cuando se desea redactar o eliminar determinados campos de forma selectiva en función de una condición y, al mismo tiempo, conservar la estructura del documento.

**Parámetros**

Ninguna.

## Ejemplo (MongoDB Shell)
<a name="DESCEND-examples"></a>

En este ejemplo, utilizaremos la `$redact` etapa con el `$$DESCEND` operador para mostrar de forma selectiva los documentos en los que el `code` campo sea igual a «Reg».

**Crea documentos de muestra**

```
db.patient.insertMany([
  { "_id": 1, "code": "Emp", "patient": "John Doe", "DOB": "1/1/1980", "Hospital": "Main" },
  { "_id": 2, "code": "Reg", "patient": "Jane Doe", "DOB": "3/27/1989", "Hospital": "Cherry Hill" },
  { "_id": 3, "code": "Emp", "patient": "Bob Smith", "DOB": "6/15/1975", "Hospital": "Downtown" }
]);
```

**Ejemplo de consulta**

```
db.patient.aggregate([
  { $redact: {
    $cond: {
      if: { $eq: ["Reg", "$code"] },
      then: "$$DESCEND",
      else: "$$PRUNE"
    }
  }}
]);
```

**Salida**

```
{
  "_id": 2,
  "code": "Reg",
  "patient": "Jane Doe",
  "DOB": "3/27/1989",
  "Hospital": "Cherry Hill"
}
```

## Ejemplos de código
<a name="DESCEND-code"></a>

Para ver un ejemplo de código para usar el `$$DESCEND` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function redactPatients() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('patient');

  const result = await collection.aggregate([
    { $redact: {
      $cond: {
        if: { $eq: ["Reg", "$code"] },
        then: "$$DESCEND",
        else: "$$PRUNE"
      }
    }}
  ]).toArray();

  console.log(result);
  client.close();
}

redactPatients();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def redact_patients():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.patient

    result = list(collection.aggregate([
        { "$redact": {
            "$cond": {
                "if": { "$eq": ["Reg", "$code"] },
                "then": "$$DESCEND",
                "else": "$$PRUNE"
            }
        }}
    ]))

    print(result)
    client.close()

redact_patients()
```

------

# \$1\$1KEEP
<a name="KEEP"></a>

La variable de `$$KEEP` sistema se usa con la `$redact` etapa de la canalización de agregación para mantener el documento o campo actual sin cambios e incluirlo en la salida.

**Parámetros**

Ninguno

## Ejemplo (MongoDB Shell)
<a name="KEEP-examples"></a>

En el siguiente ejemplo, se muestra el uso de `$$KEEP` en una canalización de agregación de Amazon DocumentDB. Los documentos solo se conservan si el acceso es igual a «público»; de lo contrario, se eliminan.

**Cree documentos de muestra**

```
db.articles.insertMany([
  { title: "Article A", access: "public", content: "Visible content" },
  { title: "Article B", access: "private", content: "Hidden content" }
]);
```

**Ejemplo de consulta**

```
db.articles.aggregate([
  {
    $redact: {
      $cond: [
        { $eq: ["$access", "public"] },
        "$$KEEP",
        "$$PRUNE"
      ]
    }
  }
]);
```

**Salida**

```
[
  {
    "_id" : ObjectId("..."),
    "title" : "Article A",
    "access" : "public",
    "content" : "Visible content"
  }
]
```

## Ejemplos de código
<a name="KEEP-code"></a>

Para ver un ejemplo de código para usar el `$$KEEP` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function run() {
  const client = new MongoClient(
    'mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0'
  );

  try {
    await client.connect();
    const db = client.db('test');
    const articles = db.collection('articles');

    const pipeline = [
      {
        $redact: {
          $cond: [
            { $eq: ["$access", "public"] },
            "$$KEEP",
            "$$PRUNE"
          ]
        }
      }
    ];

    const results = await articles.aggregate(pipeline).toArray();
    console.log(results);
  } finally {
    await client.close();
  }
}

run().catch(console.error);
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient(
    "mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0"
)

db = client.test
articles = db.articles

pipeline = [
    {
        "$redact": {
            "$cond": [
                {"$eq": ["$access", "public"]},
                "$$KEEP",
                "$$PRUNE"
            ]
        }
    }
]

results = list(articles.aggregate(pipeline))
print(results)

client.close()
```

------

# \$1\$1PRUNE
<a name="PRUNE"></a>

La variable de `$$PRUNE` sistema se usa con la `$redact` etapa de la canalización de agregación para excluir los documentos o los niveles de documentos incrustados de los resultados. Cuando una condición se evalúa como`$$PRUNE`, el documento o subdocumento actual se elimina de la salida. Por lo general, se usa con `$$DESCEND` (para conservar y recorrer el documento) o `$$KEEP` (para mantener el documento en todos los niveles).

**Parámetros**

Ninguna. La variable de `$$PRUNE` sistema se utiliza sin ningún parámetro y se debe utilizar con`$redact`.

## Ejemplo (MongoDB Shell)
<a name="PRUNE-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar `$$PRUNE` with `$redact` para excluir de los resultados a los usuarios mayores de 30 años.

**Cree documentos de muestra**

```
db.users.insert([
  { _id:1, name: "Carlos Salazar", age: 35, address: { street: "123 Main St", city: "Anytown", state: "CA" } },
  { _id:2, name: "Saanvi Sarkar", age: 28, address: { street: "456 Oak Rd", city: "Someplace", state: "NY" } },
  { _id:3, name: "Li Juan", age: 42, address: { street: "789 Pine Ave", city: "Springfield", state: "TX" } }
])
```

**Ejemplo de consulta**

```
db.users.aggregate([
  {
    $redact: {
      $cond: {
        if: { $gt: ["$age", 30] },
        then: "$$PRUNE",
        else: "$$DESCEND"
      }
    }
  }
])
```

**Salida**

```
[
  {
    "_id": 2,
    "name": "Saanvi Sarkar",
    "age": 28,
    "address": {
      "street": "456 Oak Rd",
      "city": "Someplace",
      "state": "NY"
    }
  }
]
```

## Ejemplos de código
<a name="PRUNE-code"></a>

Para ver un ejemplo de código para usar el `$$PRUNE` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

const client = new MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

async function main() {
  await client.connect();
  const db = client.db('test');
  const users = db.collection('users');

  const result = await users.aggregate([
    {
      $redact: {
        $cond: {
          if: { $gt: ["$age", 30] },
          then: "$$PRUNE",
          else: "$$DESCEND"
        }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
users = db['users']

result = list(users.aggregate([
    {
        '$redact': {
            '$cond': {
                'if': { '$gt': ['$age', 30] },
                'then': '$$PRUNE',
                'else': '$$DESCEND'
            }
        }
    }
]))

print(result)
client.close()
```

------

# \$1 RAÍZ
<a name="ROOT"></a>

El `$ROOT` operador de Amazon DocumentDB se utiliza para hacer referencia a todo el documento de entrada dentro de una canalización de agregación. Le permite acceder a todo el documento y manipularlo, incluidos todos sus campos y estructuras anidados.

**Parámetros**

Ninguno

## Ejemplo (MongoDB Shell)
<a name="ROOT-examples"></a>

En este ejemplo se muestra cómo `$ROOT` crear un registro de auditoría que capture el documento original completo junto con los metadatos sobre el momento en que se procesó.

**Cree documentos de muestra**

```
db.orders.insertMany([
  {
    _id: 1,
    orderId: "ORD-2024-001",
    customer: "María García",
    email: "maría@example.com",
    items: [
      { product: "Laptop", quantity: 1, price: 1299.99 }
    ],
    totalAmount: 1299.99
  },
  {
    _id: 2,
    orderId: "ORD-2024-002",
    customer: "Arnav Desai",
    email: "arnav@example.com",
    items: [
      { product: "Mouse", quantity: 2, price: 29.99 },
      { product: "Keyboard", quantity: 1, price: 89.99 }
    ],
    totalAmount: 149.97
  }
]);
```

**Ejemplo de consulta**

```
db.orders.aggregate([
  {
    $project: {
      processedAt: new Date(),
      originalDocument: "$$ROOT",
      summary: {
        $concat: [
          "Order ",
          "$orderId",
          " for ",
          "$customer",
          " - Total: $",
          { $toString: "$totalAmount" }
        ]
      }
    }
  }
]);
```

**Salida**

```
[
  {
    _id: 1,
    processedAt: ISODate('2025-11-24T20:43:51.492Z'),
    originalDocument: {
      _id: 1,
      orderId: 'ORD-2024-001',
      customer: 'María García',
      email: 'maría@example.com',
      items: [ { product: 'Laptop', quantity: 1, price: 1299.99 } ],
      totalAmount: 1299.99
    },
    summary: 'Order ORD-2024-001 for María García - Total: $1299.99'
  },
  {
    _id: 2,
    processedAt: ISODate('2025-11-24T20:43:51.492Z'),
    originalDocument: {
      _id: 2,
      orderId: 'ORD-2024-002',
      customer: 'Arnav Desai',
      email: 'arnav@example.com',
      items: [
        { product: 'Mouse', quantity: 2, price: 29.99 },
        { product: 'Keyboard', quantity: 1, price: 89.99 }
      ],
      totalAmount: 149.97
    },
    summary: 'Order ORD-2024-002 for Arnav Desai - Total: $149.97'
  }
]
```

## Ejemplos de código
<a name="ROOT-code"></a>

Para ver un ejemplo de código para usar el `$ROOT` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function createAuditLog() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const orders = db.collection('orders');

  const result = await orders.aggregate([
    {
      $project: {
        processedAt: new Date(),
        originalDocument: "$$ROOT",
        summary: {
          $concat: [
            "Order ",
            "$orderId",
            " for ",
            "$customer",
            " - Total: $",
            { $toString: "$totalAmount" }
          ]
        }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

createAuditLog();
```

------
#### [ Python ]

```
from pymongo import MongoClient
from datetime import datetime

def create_audit_log():
    client = MongoClient('mongodb://username:password@docdb-cluster.cluster-123456789.us-east-1.docdb.amazonaws.com:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['orders']

    result = list(collection.aggregate([
        {
            '$project': {
                'processedAt': datetime.now(),
                'originalDocument': '$$ROOT',
                'summary': {
                    '$concat': [
                        "Order ",
                        "$orderId",
                        " for ",
                        "$customer",
                        " - Total: $",
                        { '$toString': "$totalAmount" }
                    ]
                }
            }
        }
    ]))

    print(result)
    client.close()

create_audit_log()
```

------

# \$1abs
<a name="abs"></a>

El `$abs` operador de Amazon DocumentDB devuelve el valor absoluto de un número. Se puede usar en la canalización de agregación para realizar operaciones matemáticas en campos numéricos.

**Parámetros**
+ `number`: La expresión numérica para la que se devolverá el valor absoluto.

## Ejemplo (MongoDB Shell)
<a name="abs-examples"></a>

En este ejemplo se muestra el uso del `$abs` operador para encontrar el valor absoluto de un campo numérico.

**Cree documentos de muestra**

```
db.numbers.insertMany([
  { "_id": 1, "value": -5 },
  { "_id": 2, "value": 10 },
  { "_id": 3, "value": -3.14 },
  { "_id": 4, "value": 0 }
]);
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  { $project: {
    "_id": 1,
    "absolute_value": { $abs: "$value" }
  }}
]);
```

**Salida**

```
[
  { "_id": 1, "absolute_value": 5 },
  { "_id": 2, "absolute_value": 10 },
  { "_id": 3, "absolute_value": 3.14 },
  { "_id": 4, "absolute_value": 0 }
]
```

## Ejemplos de código
<a name="abs-code"></a>

Para ver un ejemplo de código para usar el `$abs` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('numbers');

  const result = await collection.aggregate([
    { $project: {
      "_id": 1,
      "absolute_value": { $abs: "$value" }
    }}
  ]).toArray();

  console.log(result);
  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def main():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['numbers']

    result = list(collection.aggregate([
        { '$project': {
            "_id": 1,
            "absolute_value": { "$abs": "$value" }
        }}
    ]))

    print(result)
    client.close()

if __name__ == "__main__":
    main()
```

------

# \$1add
<a name="add"></a>

El `$add` operador de Amazon DocumentDB se utiliza para sumar números o fechas. Se puede utilizar para realizar operaciones aritméticas en campos numéricos o para realizar operaciones aritméticas de fechas añadiendo varias unidades de tiempo a un campo de fecha.

**Parámetros**
+ `expression1`: el primer número o fecha que se va a añadir.
+ `expression2`: El segundo número o fecha que se va a añadir.
+ `expression3`: (opcional) Números o fechas adicionales para añadir.

## Ejemplo (MongoDB Shell)
<a name="add-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$add` operador para sumar dos números.

**Cree documentos de muestra**

```
db.numbers.insertMany([
  { _id: 1, a: 5, b: 3 },
  { _id: 2, a: 10, b: 7 },
  { _id: 3, a: 2, b: 8 }
]);
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  { $project: {
    _id: 1,
    sum: { $add: ["$a", "$b"] }
  }}
])
```

**Salida**

```
[
  { "_id" : 1, "sum" : 8 },
  { "_id" : 2, "sum" : 17 },
  { "_id" : 3, "sum" : 10 }
]
```

En este ejemplo, el `$add` operador se utiliza para añadir los valores de los `b` campos `a` y de cada documento y almacenar el resultado en el `sum` campo.

## Ejemplos de código
<a name="add-code"></a>

Para ver un ejemplo de código para usar el `$add` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('numbers');

  const result = await collection.aggregate([
    { $project: {
      _id: 1,
      sum: { $add: ['$a', '$b'] }
    }}
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
collection = db['numbers']

result = list(collection.aggregate([
    { '$project': {
        '_id': 1,
        'sum': { '$add': ['$a', '$b'] }
    }}
]))

print(result)
client.close()
```

------

# \$1addToSet
<a name="addToSet-aggregation"></a>

El operador de `$addToSet` agregación devuelve una matriz de valores únicos de una expresión especificada para cada grupo. Se usa dentro de la `$group` etapa para acumular valores distintos, eliminando automáticamente los duplicados.

**Parámetros**
+ `expression`: La expresión que se va a evaluar para cada documento del grupo.

## Ejemplo (MongoDB Shell)
<a name="addToSet-aggregation-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$addToSet` operador para recopilar ciudades únicas en las que se realizaron los pedidos de cada cliente.

**Cree documentos de muestra**

```
db.orders.insertMany([
  { _id: 1, customer: "Alice", city: "Seattle", amount: 100 },
  { _id: 2, customer: "Alice", city: "Portland", amount: 150 },
  { _id: 3, customer: "Bob", city: "Seattle", amount: 200 },
  { _id: 4, customer: "Alice", city: "Seattle", amount: 75 },
  { _id: 5, customer: "Bob", city: "Boston", amount: 300 }
]);
```

**Ejemplo de consulta**

```
db.orders.aggregate([
  {
    $group: {
      _id: "$customer",
      cities: { $addToSet: "$city" }
    }
  }
]);
```

**Salida**

```
[
  { _id: 'Bob', cities: [ 'Seattle', 'Boston' ] },
  { _id: 'Alice', cities: [ 'Seattle', 'Portland' ] }
]
```

## Ejemplos de código
<a name="addToSet-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$addToSet` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('orders');

  const result = await collection.aggregate([
    {
      $group: {
        _id: "$customer",
        cities: { $addToSet: "$city" }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['orders']

    result = list(collection.aggregate([
        {
            '$group': {
                '_id': '$customer',
                'cities': { '$addToSet': '$city' }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1addFields
<a name="addFields"></a>

La `$addFields` etapa del proceso de agregación de Amazon DocumentDB le permite añadir nuevos campos calculados a los documentos. Esto puede resultar útil para añadir datos derivados o transformados a los documentos.

**Parámetros**
+ `newField`: el nombre del nuevo campo que se va a añadir.
+ `expression`: una expresión que se resuelve en el valor del nuevo campo.

## Ejemplo (MongoDB Shell)
<a name="addFields-examples"></a>

En el siguiente ejemplo, se muestra cómo `$addFields` añadir un nuevo campo `TotalInventory` que calcule el inventario total en función de los campos `Inventory.OnHand` y`Inventory.OrderQnty`.

**Cree documentos de muestra**

```
db.example.insertMany([
  {
    "Item": "Spray Paint",
    "Colors": ["Black", "Red", "Green", "Blue"],
    "Inventory": {
      "OnHand": 47,
      "MinOnHand": 50,
      "OrderQnty": 36
    },
    "UnitPrice": 3.99
  },
  {
    "Item": "Ruler",
    "Colors": ["Red", "Green", "Blue", "Clear", "Yellow"],
    "Inventory": {
      "OnHand": 47,
      "MinOnHand": 40
    },
    "UnitPrice": 0.89
  }
]);
```

**Ejemplo de consulta**

```
db.example.aggregate([
  {
    $addFields: {
      TotalInventory: { $add: ["$Inventory.OnHand", "$Inventory.OrderQnty"] }
    }
  }
])
```

**Salida**

```
[
  {
    "_id" : ObjectId("5bedafbcf65ff161707de24f"),
    "Item" : "Ruler",
    "Colors" : [ "Red", "Green", "Blue", "Clear", "Yellow" ],
    "Inventory" : {
      "OnHand" : 47,
      "MinOnHand" : 40
    },
    "UnitPrice" : 0.89,
    "TotalInventory" : 47
  },
  {
    "_id" : ObjectId("5bedafbcf65ff161707de250"),
    "Item" : "Spray Paint",
    "Colors" : [ "Black", "Red", "Green", "Blue" ],
    "Inventory" : {
      "OnHand" : 47,
      "MinOnHand" : 50,
      "OrderQnty" : 36
    },
    "UnitPrice" : 3.99,
    "TotalInventory" : 83
  }
]
```

## Ejemplos de código
<a name="addFields-code"></a>

Para ver un ejemplo de código para usar el `$addFields` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
const db = client.db('test');
const collection = db.collection('example');

const result = await collection.aggregate([
  {
    $addFields: {
      TotalInventory: { $add: ['$Inventory.OnHand', '$Inventory.OrderQnty'] }
    }
  }
]).toArray();

console.log(result);

await client.close();
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
collection = db['example']

result = list(collection.aggregate([
    {
        '$addFields': {
            'TotalInventory': { '$add': ['$Inventory.OnHand', '$Inventory.OrderQnty'] }
        }
    }
]))

print(result)
client.close()
```

------

# \$1allElementsTrue
<a name="allElementsTrue"></a>

Novedades de la versión 4.0

El `$allElementsTrue` operador se utiliza para comprobar si todos los elementos de una matriz tienen un valor verdadero.

**Parámetros**
+ `expression`: expresión que da como resultado una matriz.

## Ejemplo (MongoDB Shell)
<a name="allElementsTrue-examples"></a>

El siguiente ejemplo demuestra el uso de `$allElementsTrue` para comprobar si todos los elementos de una matriz son verdaderos.

**Cree documentos de muestra**

```
db.collection.insert([
  { "name": "John", "scores": [100, 90, 80] },
  { "name": "Jane", "scores": [80, 85, 0] },
  { "name": "Bob", "scores": [90, 95, null] }
])
```

**Ejemplo de consulta**

```
db.collection.find({
  "scores": { "$allElementsTrue": [{ "$gt": 0 }] }
})
```

**Salida**

```
[
  { "_id" : ObjectId("..."), "name" : "John", "scores" : [ 100, 90, 80 ] },
  { "_id" : ObjectId("..."), "name" : "Bob", "scores" : [ 90, 95, null ] }
]
```

En este ejemplo, la consulta comprueba si todos los elementos de la `scores` matriz son mayores que 0. `&quot;name&quot;: &quot;Jane&quot;`Se excluye el documento con porque la `scores` matriz contiene un 0, que es un valor falso.

## Ejemplos de código
<a name="allElementsTrue-code"></a>

Para ver un ejemplo de código para usar el `$allElementsTrue` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('collection');

  const result = await collection.find({
    "scores": { "$allElementsTrue": [{ "$gt": 0 }] }
  }).toArray();

  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['collection']

    result = list(collection.find({
        "scores": {"$allElementsTrue": [{"$gt": 0}]}
    }))

    print(result)

    client.close()

example()
```

------

# \$1and
<a name="and-aggregation"></a>

El operador de `$and` agregación evalúa varias expresiones y retorna `true` solo si todas las expresiones tienen una evaluación igual a`true`. Si alguna expresión lo es`false`, retorna`false`.

**Parámetros**
+ `expressions`: Un conjunto de expresiones para evaluar.

## Ejemplo (MongoDB Shell)
<a name="and-aggregation-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$and` operador para comprobar si los productos cumplen varios criterios.

**Cree documentos de muestra**

```
db.products.insertMany([
  { _id: 1, name: "Laptop", price: 1200, inStock: true },
  { _id: 2, name: "Mouse", price: 25, inStock: false },
  { _id: 3, name: "Keyboard", price: 75, inStock: true }
]);
```

**Ejemplo de consulta**

```
db.products.aggregate([
  {
    $project: {
      name: 1,
      price: 1,
      inStock: 1,
      affordable: {
        $and: [
          { $lt: ["$price", 100] },
          { $eq: ["$inStock", true] }
        ]
      }
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, name: 'Laptop', price: 1200, inStock: true, affordable: false },
  { _id: 2, name: 'Mouse', price: 25, inStock: false, affordable: false },
  { _id: 3, name: 'Keyboard', price: 75, inStock: true, affordable: true }
]
```

## Ejemplos de código
<a name="and-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$and` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('products');

  const result = await collection.aggregate([
    {
      $project: {
        name: 1,
        price: 1,
        inStock: 1,
        affordable: {
          $and: [
            { $lt: ["$price", 100] },
            { $eq: ["$inStock", true] }
          ]
        }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['products']

    result = list(collection.aggregate([
        {
            '$project': {
                'name': 1,
                'price': 1,
                'inStock': 1,
                'affordable': {
                    '$and': [
                        { '$lt': ['$price', 100] },
                        { '$eq': ['$inStock', True] }
                    ]
                }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1anyElementTrue
<a name="anyElementTrue"></a>

Novedades de la versión 4.0

El `$anyElementTrue` operador se usa para determinar si algún elemento de una matriz es verdadero.

**Parámetros**
+ `field`: un campo de matriz para evaluar.

## Ejemplo (MongoDB Shell)
<a name="anyElementTrue-examples"></a>

El siguiente ejemplo demuestra el uso de `$anyElementTrue` para comprobar si algún elemento de una matriz es verdadero.

**Cree documentos de muestra**

```
db.grades.insertMany([
  { _id: 1, student: 'Tim', scores: [false, false, null] },
  { _id: 2, student: 'Bob', scores: [false, 0, false] },
  { _id: 3, student: 'Ivy', scores: [false, true, 0] }
])
```

**Ejemplo de consulta**

```
db.grades.aggregate([
  {
    $project: {
      student: 1,
      isAnyTrue: { $anyElementTrue: ["$scores"] },
      _id: 0
    }
  }
])
```

**Salida**

```
[
  { student: 'Tim', isAnyTrue: false },
  { student: 'Bob', isAnyTrue: false },
  { student: 'Ivy', isAnyTrue: true }
]
```

## Ejemplos de código
<a name="anyElementTrue-code"></a>

Para ver un ejemplo de código para usar el `$anyElementTrue` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('grades');

  const result = await collection.aggregate([
    {
      $project: {
        student: 1,
        isAnyTrue: { $anyElementTrue: ["$scores"] },
        _id: 0
      }
    }
  ]).toArray();

  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['grades']

    result = list(collection.aggregate([
      {
        "$project": {
          "student": 1,
          "isAnyTrue": { "$anyElementTrue": ["$scores"] },
          "_id": 0
        }
      }
    ]))

    print(result)

    client.close()

example()
```

------

# \$1arrayElemAt
<a name="arrayElemAt"></a>

El `$arrayElemAt` operador de Amazon DocumentDB le permite recuperar un elemento de una matriz por su posición en el índice. Esto resulta especialmente útil cuando necesita acceder a un elemento específico dentro de un campo matricial de sus documentos.

**Parámetros**
+ `array`: La matriz de entrada de la que se va a recuperar un elemento.
+ `index`: la posición de índice basada en cero del elemento que se va a recuperar. Este valor debe ser un número entero no negativo.

## Ejemplo (MongoDB Shell)
<a name="arrayElemAt-examples"></a>

En este ejemplo, demostraremos cómo usar el `$arrayElemAt` operador para recuperar elementos específicos de la `flight_miles` matriz de la `miles` colección.

**Cree documentos de muestra**

```
db.miles.insertMany([
  { "_id" : 1, "member_since" : ISODate("1987-01-01T00:00:00Z"), "credit_card" : false, "flight_miles" : [ 1205, 2560, 880 ]},
  { "_id" : 2, "member_since" : ISODate("1982-01-01T00:00:00Z"), "credit_card" : true, "flight_miles" : [ 1205, 2560, 890, 2780 ]},
  { "_id" : 3, "member_since" : ISODate("1999-01-01T00:00:00Z"), "credit_card" : true, "flight_miles" : [ 1205, 880 ]}
]);
```

**Ejemplo de consulta**

```
db.miles.aggregate([
  { $project: {
    "_id": 1,
    "first_mile": { $arrayElemAt: [ "$flight_miles", 0 ] },
    "last_mile": { $arrayElemAt: [ "$flight_miles", -1 ] }
  }}
]);
```

**Salida**

```
{ "_id" : 1, "first_mile" : 1205, "last_mile" : 880 }
{ "_id" : 2, "first_mile" : 1205, "last_mile" : 2780 }
{ "_id" : 3, "first_mile" : 1205, "last_mile" : 880 }
```

En este ejemplo, utilizamos el `$arrayElemAt` operador para recuperar el primer y el último elemento de la `flight_miles` matriz de cada documento.

## Ejemplos de código
<a name="arrayElemAt-code"></a>

Para ver un ejemplo de código para usar el `$arrayElemAt` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('miles');

  const result = await collection.aggregate([
    { $project: {
      "_id": 1,
      "first_mile": { $arrayElemAt: [ "$flight_miles", 0 ] },
      "last_mile": { $arrayElemAt: [ "$flight_miles", -1 ] }
    }}
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.mydatabase
    collection = db.miles

    result = list(collection.aggregate([
        { "$project": {
            "_id": 1,
            "first_mile": { "$arrayElemAt": [ "$flight_miles", 0 ] },
            "last_mile": { "$arrayElemAt": [ "$flight_miles", -1 ] }
        }}
    ]))

    print(result)
    client.close()

example()
```

------

# \$1arrayToObject
<a name="arrayToObject"></a>

El `$arrayToObject` operador de Amazon DocumentDB es el inverso del `$objectToArray` operador. Toma una matriz de documentos de pares clave-valor y la convierte en un único documento. Esto resulta especialmente útil cuando se necesita volver a convertir una matriz de pares clave-valor en una estructura de objeto o documento.

**Parámetros**
+ `array expression`: expresión que se resuelve en una matriz. Los elementos de la matriz deben ser documentos con dos campos: `k` (la clave) y `v` (el valor).

## Ejemplo (MongoDB Shell)
<a name="arrayToObject-examples"></a>

En el siguiente ejemplo, se muestra cómo `$arrayToObject` convertir una matriz de pares clave-valor en un documento.

**Cree documentos de muestra**

```
db.videos.insertMany([
  { "_id": 1, "name": "Live Soft", "inventory": { "Des Moines": 1000, "Ames": 500 } },
  { "_id": 2, "name": "Top Pilot", "inventory": { "Mason City": 250, "Des Moines": 1000 } },
  { "_id": 3, "name": "Romancing the Rock", "inventory": { "Mason City": 250, "Ames": 500 } },
  { "_id": 4, "name": "Bravemind", "inventory": { "Mason City": 250, "Des Moines": 1000, "Ames": 500 } }
]);
```

**Ejemplo de consulta**

```
db.videos.aggregate([
  { $project: { name: 1, videos: { $objectToArray: "$inventory" } } },
  { $project: { name: 1, inventory: { $arrayToObject: "$videos" } } }
]);
```

**Salida**

```
{ "_id" : 1, "name" : "Live Soft", "inventory" : { "Des Moines" : 1000, "Ames" : 500 } }
{ "_id" : 2, "name" : "Top Pilot", "inventory" : { "Mason City" : 250, "Des Moines" : 1000 } }
{ "_id" : 3, "name" : "Romancing the Rock", "inventory" : { "Mason City" : 250, "Ames" : 500 } }
{ "_id" : 4, "name" : "Bravemind", "inventory" : { "Mason City" : 250, "Des Moines" : 1000, "Ames" : 500 } }
```

En este ejemplo, el `$objectToArray` operador se utiliza para convertir el `inventory` objeto en una matriz de pares clave-valor. A continuación, el `$arrayToObject` operador se utiliza para volver a convertir la matriz en un documento, restaurando la estructura original del objeto.

## Ejemplos de código
<a name="arrayToObject-code"></a>

Para ver un ejemplo de código para usar el `$arrayToObject` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('videos');

  const result = await collection.aggregate([
    { $project: { name: 1, videos: { $objectToArray: '$inventory' } } },
    { $project: { name: 1, inventory: { $arrayToObject: '$videos' } } }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['videos']

    result = list(collection.aggregate([
        { '$project': { 'name': 1, 'videos': { '$objectToArray': '$inventory' } } },
        { '$project': { 'name': 1, 'inventory': { '$arrayToObject': '$videos' } } }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1avg
<a name="avg"></a>

El operador de `$avg` agregación de Amazon DocumentDB calcula el valor medio de la expresión especificada en todos los documentos que se introducen en la etapa. Este operador es útil para calcular el promedio de un campo numérico o una expresión en un conjunto de documentos.

**Parámetros**
+ `expression`: la expresión que se utilizará para calcular el promedio. Puede ser una ruta de campo (p. ej.`"$field"`) o una expresión (p. ej.`{ $multiply: ["$field1", "$field2"] }`).

## Ejemplo (MongoDB Shell)
<a name="avg-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$avg` operador para calcular la puntuación media de un conjunto de documentos de los estudiantes.

**Cree documentos de muestra**

```
db.students.insertMany([
  { name: "John", score: 85 },
  { name: "Jane", score: 92 },
  { name: "Bob", score: 78 },
  { name: "Alice", score: 90 }
]);
```

**Ejemplo de consulta**

```
db.students.aggregate([
  { $group: { 
    _id: null,
    avgScore: { $avg: "$score" }
  }}
]);
```

**Salida**

```
[
  {
    "_id": null,
    "avgScore": 86.25
  }
]
```

## Ejemplos de código
<a name="avg-code"></a>

Para ver un ejemplo de código para usar el `$avg` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function calculateAvgScore() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const result = await db.collection('students').aggregate([
    { $group: {
      _id: null,
      avgScore: { $avg: '$score' }
    }}
  ]).toArray();
  console.log(result);
  await client.close();
}

calculateAvgScore();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def calculate_avg_score():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    result = list(db.students.aggregate([
        { '$group': {
            '_id': None,
            'avgScore': { '$avg': '$score' }
        }}
    ]))
    print(result)
    client.close()

calculate_avg_score()
```

------

# \$1bucket
<a name="bucket"></a>

Novedades de la versión 8.0

No es compatible con el clúster de Elastic.

La etapa de `$bucket` agregación de Amazon DocumentDB le permite agrupar los documentos de entrada en cubos en función de una expresión específica y de los límites de los cubos. Esto puede resultar útil para analizar los datos que se encuentran dentro de determinados rangos de valores o categorías.

**Parámetros**
+ `groupBy`(obligatorio): la expresión que especifica el valor por el que se va a agrupar.
+ `boundaries`(obligatorio): matriz de valores dobles que definen los límites de los cubos. Los documentos se asignan a los cubos en función del valor de `groupBy` expresión que se encuentra dentro de los límites especificados.
+ `default`(opcional): un valor literal que se genera para los documentos cuyo valor de `groupBy` expresión no se encuentra dentro de ninguno de los límites especificados.
+ `output`(opcional): objeto que especifica la información que se va a generar para cada segmento. Puede usar operadores acumuladores como`$sum`, `$avg``$min`, y `$max` para calcular las agregaciones de cada segmento.

## Ejemplo (MongoDB Shell)
<a name="bucket-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$bucket` escenario para agrupar los datos de ventas por rango de precios.

**Cree documentos de muestra**

```
db.sales.insertMany([
  { item: "abc", price: 10, quantity: 2, date: new Date("2020-09-01") },
  { item: "def", price: 20, quantity: 1, date: new Date("2020-10-01") },
  { item: "ghi", price: 5, quantity: 3, date: new Date("2020-11-01") },
  { item: "jkl", price: 15, quantity: 2, date: new Date("2020-12-01") },
  { item: "mno", price: 25, quantity: 1, date: new Date("2021-01-01") }
]);
```

**Ejemplo de consulta**

```
db.sales.aggregate([
  {
    $bucket: {
      groupBy: "$price",
      boundaries: [0, 10, 20, 30],
      default: "Other",
      output: {
        "count": { $sum: 1 },
        "totalQuantity": { $sum: "$quantity" }
      }
    }
  },
  {
    $sort: { _id: 1 }
  }
])
```

**Salida**

```
[
  { _id: 0, count: 1, totalQuantity: 3 },
  { _id: 10, count: 2, totalQuantity: 4 },
  { _id: 20, count: 2, totalQuantity: 2 }
]
```

## Ejemplos de código
<a name="bucket-code"></a>

Para ver un ejemplo de código para usar el `$bucket` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const sales = db.collection('sales');

  const result = await sales.aggregate([
    {
      $bucket: {
        groupBy: "$price",
        boundaries: [0, 10, 20, 30],
        default: "Other",
        output: {
          "count": { $sum: 1 },
          "totalQuantity": { $sum: "$quantity" }
        }
      }
    },
    {
      $sort: { _id: 1 }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&lsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    sales = db['sales']

    result = list(sales.aggregate([
        {
            '$bucket': {
                'groupBy': '$price',
                'boundaries': [0, 10, 20, 30],
                'default': 'Other',
                'output': {
                    'count': {'$sum': 1},
                    'totalQuantity': {'$sum': '$quantity'}
                }
            }
        },
        {
            "$sort": { "_id": 1 }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1ceil
<a name="ceil"></a>

Novedades de la versión 4.0

El `$ceil` operador de Amazon DocumentDB, al igual que en MongoDB, redondea un número al entero más cercano. Esto resulta útil cuando necesita realizar operaciones matemáticas en campos numéricos y asegurarse de que el resultado es un número entero.

**Parámetros**
+ `expression`: la expresión numérica que se va a redondear.

## Ejemplo (MongoDB Shell)
<a name="ceil-examples"></a>

En este ejemplo se muestra cómo utilizar el `$ceil` operador para redondear un campo numérico.

**Cree documentos de muestra**

```
db.numbers.insertMany([
  { "_id": 1, "value": 3.14 },
  { "_id": 2, "value": -2.7 },
  { "_id": 3, "value": 0 }
])
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  { $project: {
    "roundedUp": { $ceil: "$value" }
  }}
])
```

**Salida**

```
{ "_id": 1, "roundedUp": 4 }
{ "_id": 2, "roundedUp": -2 }
{ "_id": 3, "roundedUp": 0 }
```

## Ejemplos de código
<a name="ceil-code"></a>

Para ver un ejemplo de código para usar el `$ceil` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('numbers');

  const result = await collection.aggregate([
    { $project: {
      "roundedUp": { $ceil: "$value" }
    }}
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.numbers

    result = list(collection.aggregate([
        { '$project': {
            "roundedUp": { '$ceil': "$value" }
        }}
    ]))

    print(result)
    client.close()

example()
```

------

# \$1changeStream
<a name="changeStream"></a>

No es compatible con el clúster de Elastic.

La etapa de `$changeStream` agregación abre un cursor de flujo de cambios para monitorear los cambios en tiempo real en una colección. Devuelve los documentos de los eventos de cambio cuando se realizan operaciones de inserción, actualización, reemplazo o eliminación.

**Parámetros**
+ `fullDocument`: Especifica si se debe devolver el documento completo para las operaciones de actualización. Las opciones son `default` y `updateLookup`.
+ `resumeAfter`: opcional. Reanude el token para continuar desde un punto específico del flujo de cambios.
+ `startAtOperationTime`: opcional. Marca de tiempo desde la que se inicia el flujo de cambios.
+ `allChangesForCluster`: opcional. Valor booleano. Cuando`true`, observa todos los cambios en el clúster (para la base de datos de administración). Cuando `false` (predeterminado), solo observa la colección especificada.

## Ejemplo (MongoDB Shell)
<a name="changeStream-examples"></a>

El siguiente ejemplo demuestra el uso del `$changeStream` escenario para supervisar los cambios en una colección.

**Ejemplo de consulta**

```
// Open change stream first
const changeStream = db.inventory.aggregate([
  { $changeStream: { fullDocument: "updateLookup" } }
]);

// In another session, insert a document
db.inventory.insertOne({ _id: 1, item: "Widget", qty: 10 });

// Back in the first session, read the change event
if (changeStream.hasNext()) {
  print(tojson(changeStream.next()));
}
```

**Salida**

```
{
  _id: { _data: '...' },
  operationType: 'insert',
  clusterTime: Timestamp(1, 1234567890),
  fullDocument: { _id: 1, item: 'Widget', qty: 10 },
  ns: { db: 'test', coll: 'inventory' },
  documentKey: { _id: 1 }
}
```

## Ejemplos de código
<a name="changeStream-code"></a>

Para ver un ejemplo de código para usar la etapa de `$changeStream` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('inventory');

  // Open change stream
  const changeStream = collection.watch([]);

  changeStream.on('change', (change) => {
    console.log('Change detected:', change);
  });

  // Simulate insert in another operation
  setTimeout(async () => {
    await collection.insertOne({ _id: 1, item: 'Widget', qty: 10 });
  }, 1000);

  // Keep connection open to receive changes
  // In production, handle cleanup appropriately
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient
import threading
import time

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['inventory']

    # Open change stream
    change_stream = collection.watch([])

    # Insert document in separate thread after delay
    def insert_doc():
        time.sleep(1)
        collection.insert_one({'_id': 1, 'item': 'Widget', 'qty': 10})

    threading.Thread(target=insert_doc).start()

    # Watch for changes
    for change in change_stream:
        print('Change detected:', change)
        break  # Exit after first change

    client.close()

example()
```

------

# \$1cmp
<a name="cmp"></a>

El `$cmp` operador de Amazon DocumentDB se utiliza para comparar dos valores y devolver un valor entero que indica su orden relativo. Es un operador de comparación que compara dos expresiones y devuelve un valor entero de -1, 0 o 1, dependiendo de si el primer valor es menor, igual o mayor que el segundo valor, respectivamente.

**Parámetros**
+ `expression1`: la primera expresión que se va a comparar.
+ `expression2`: La segunda expresión que se va a comparar.

## Ejemplo (MongoDB Shell)
<a name="cmp-examples"></a>

El siguiente ejemplo demuestra el uso del `$cmp` operador para comparar dos valores numéricos.

**Cree documentos de muestra**

```
db.collection.insertMany([
  { _id: 1, value1: 10, value2: 20 },
  { _id: 2, value1: 15, value2: 15 },
  { _id: 3, value1: 20, value2: 10 }
]);
```

**Ejemplo de consulta**

```
db.collection.find({
  $expr: {
    $cmp: ["$value1", "$value2"]
  }
})
```

**Salida**

```
[
  { "_id" : 1, "value1" : 10, "value2" : 20 },
  { "_id" : 3, "value1" : 20, "value2" : 10 }
]
```

En este ejemplo, el `$cmp` operador compara los `value2` campos `value1` y de cada documento. El resultado es:

```
- `$cmp: ["$value1", "$value2"]` returns -1 for the first document (10 < 20), 0 for the second document (15 = 15), and 1 for the third document (20 > 10).
```

## Ejemplos de código
<a name="cmp-code"></a>

Para ver un ejemplo de código para usar el `$cmp` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

A continuación, se muestra un ejemplo del uso `$cmp` del operador en una aplicación de Node.js con el `mongodb` controlador:

```
const { MongoClient } = require('mongodb');

const client = new MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

async function main() {
  await client.connect();
  const db = client.db('test');
  const collection = db.collection('mycollection');

  // Insert sample documents
  await collection.insertMany([
    { _id: 1, value1: 10, value2: 20 },
    { _id: 2, value1: 15, value2: 15 },
    { _id: 3, value1: 20, value2: 10 }
  ]);

  // Query using $cmp operator
  const result = await collection.find({
    $expr: {
      $cmp: ['$value1', '$value2']
    }
  }).toArray();

  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

Este es un ejemplo del uso del `$cmp` operador en una aplicación de Python con el `pymongo` controlador:

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
collection = db['mycollection']

# Insert sample documents
collection.insert_many([
    {'_id': 1, 'value1': 10, 'value2': 20},
    {'_id': 2, 'value1': 15, 'value2': 15},
    {'_id': 3, 'value1': 20, 'value2': 10}
])

# Query using $cmp operator
result = list(collection.find({
    '$expr': {
        '$cmp': ['$value1', '$value2']
    }
}))

print(result)

client.close()
```

El resultado de los ejemplos de Node.js y Python será el mismo que el del ejemplo de MongoDB Shell:

```
[
  { "_id" : 1, "value1" : 10, "value2" : 20 },
  { "_id" : 2, "value1" : 15, "value2" : 15 },
  { "_id" : 3, "value1" : 20, "value2" : 10 }
]
```

------

# \$1collStats
<a name="collStats"></a>

Novedades de la versión 4.0

La etapa de `$collStats` agregación de Amazon DocumentDB proporciona estadísticas sobre la colección especificada, de forma similar al `db.collection.stats()` comando del shell de MongoDB. Esta etapa se puede utilizar para recuperar información sobre la recopilación, como la cantidad de documentos, el tamaño total de la colección y varias métricas de rendimiento.

**Parámetros**
+ `latencyStats`: (opcional) Un documento que especifica las opciones para recopilar estadísticas de latencia. Este parámetro no se admite en Amazon DocumentDB.
+ `recordStats`: (opcional) Documento que especifica las opciones para recopilar estadísticas de registros. Este parámetro no se admite en Amazon DocumentDB.
+ `queryExecStats`: (opcional) Documento que especifica las opciones para recopilar estadísticas de ejecución de consultas. Este parámetro no se admite en Amazon DocumentDB.

## Ejemplo (MongoDB Shell)
<a name="collStats-examples"></a>

El siguiente ejemplo muestra cómo utilizar la etapa de `$collStats` agregación para recuperar estadísticas sobre una colección nombrada `test` en la `db` base de datos.

**Cree documentos de muestra**

```
db.test.insertMany([
  { "name": "John", "age": 30 },
  { "name": "Jane", "age": 25 },
  { "name": "Bob", "age": 35 }
]);
```

**Ejemplo de consulta**

```
db.test.aggregate([
  { $collStats: {} }
]);
```

**Salida**

```
{
  "ns" : "db.test",
  "count" : 3,
  "size" : 87,
  "avgObjSize" : 29,
  "storageSize" : 40960,
  "capped" : false,
  "nindexes" : 1,
  "totalIndexSize" : 8192,
  "indexSizes" : {
    "_id_" : 8192
  },
  "collScans" : 0,
  "idxScans" : 0,
  "opCounter" : {
    "numDocsIns" : 3,
    "numDocsUpd" : 0,
    "numDocsDel" : 0
  },
  "cacheStats" : {
    "collBlksHit" : 0,
    "collBlksRead" : 0,
    "collHitRatio" : 0,
    "idxBlksHit" : 0,
    "idxBlksRead" : 0,
    "idxHitRatio" : 0
  },
  "lastReset" : "2023-04-11T12:00:00Z",
  "ok" : 1,
  "operationTime" : Timestamp(1681206000, 1)
}
```

## Ejemplos de código
<a name="collStats-code"></a>

Para ver un ejemplo de código para usar el `$collStats` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

A continuación, se muestra un ejemplo de cómo utilizar la etapa de `$collStats` agregación en una aplicación de Node.js con el controlador Node.js oficial de MongoDB:

```
const { MongoClient } = require('mongodb');

async function runCollStatsExample() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('db');
  const collection = db.collection('test');

  const result = await collection.aggregate([
    { $collStats: {} }
  ]).toArray();

  console.log(result);

  await client.close();
}

runCollStatsExample();
```

------
#### [ Python ]

A continuación, se muestra un ejemplo de cómo utilizar la etapa de `$collStats` agregación en una aplicación de Python mediante el PyMongo controlador:

```
from pymongo import MongoClient

def run_coll_stats_example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['db']
    collection = db['test']

    result = list(collection.aggregate([
        { '$collStats': {} }
    ]))

    print(result)

    client.close()

run_coll_stats_example()
```

------

# \$1concat
<a name="concat"></a>

El operador de `$concat` agregación de Amazon DocumentDB concatena (o combina) varias cadenas de un documento para producir una sola cadena que se puede devolver a la aplicación. Esto reduce el trabajo realizado en la aplicación, ya que la manipulación de las cadenas se realiza a nivel de la base de datos.

**Parámetros**
+ `expression1`: La primera cadena que se va a concatenar.
+ `expression2`: La segunda cadena que se va a concatenar.
+ `...`: cadenas adicionales para concatenar (opcional).

## Ejemplo (MongoDB Shell)
<a name="concat-examples"></a>

En este ejemplo, concatenamos los nombres y apellidos de los usuarios para obtener el nombre completo de cada persona.

**Cree documentos de muestra**

```
db.people.insertMany([
  { "_id":1, "first_name":"Jane", "last_name":"Doe", "DOB":"2/1/1999", "Desk": "MSP102-MN"},
  { "_id":2, "first_name":"John", "last_name":"Doe", "DOB":"12/21/1992", "Desk": "DSM301-IA"},
  { "_id":3, "first_name":"Steve", "last_name":"Smith", "DOB":"3/21/1981", "Desk":"MKE233-WI"}
])
```

**Ejemplo de consulta**

```
db.people.aggregate([
  { $project: { full_name: { $concat: [ "$first_name", " ", "$last_name"] } } }
])
```

**Salida**

```
{ "_id" : 1, "full_name" : "Jane Doe" }
{ "_id" : 2, "full_name" : "John Doe" }
{ "_id" : 3, "full_name" : "Steve Smith" }
```

## Ejemplos de código
<a name="concat-code"></a>

Para ver un ejemplo de código para usar el `$concat` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function concatenateNames() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');

  const result = await db.collection('people').aggregate([
    { $project: { full_name: { $concat: [ "$first_name", " ", "$last_name"] } } }
  ]).toArray();

  console.log(result);

  await client.close();
}

concatenateNames();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def concatenate_names():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']

    result = list(db.people.aggregate([
        { '$project': { 'full_name': { '$concat': [ '$first_name', ' ', '$last_name' ] } } }
    ]))

    print(result)

    client.close()

concatenate_names()
```

------

# \$1concatArrays
<a name="concatArrays"></a>

El operador de `$concatArrays` agregación de Amazon DocumentDB se utiliza para concatenar dos o más matrices en una sola matriz. Esto puede resultar útil cuando necesite combinar varias matrices de datos en una sola matriz para su posterior procesamiento o análisis.

**Parámetros**
+ `array1`: La primera matriz que se va a concatenar.
+ `array2`: La segunda matriz que se va a concatenar.
+ `[array3, ...]`: (opcional) Matrices adicionales que se van a concatenar.

## Ejemplo (MongoDB Shell)
<a name="concatArrays-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$concatArrays` operador para combinar dos matrices en una sola matriz.

**Cree documentos de muestra**

```
db.collection.insertMany([
  {
    "_id": 1,
    "name": "John Doe",
    "hobbies": ["reading", "swimming"],
    "skills": ["programming", "design"]
  },
  {
    "_id": 2,
    "name": "Jane Smith",
    "hobbies": ["hiking", "cooking"],
    "skills": ["marketing", "analysis"]
  }
]);
```

**Ejemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      _id: 0,
      name: 1,
      all_activities: { $concatArrays: ["$hobbies", "$skills"] }
    }
  }
]);
```

**Salida**

```
[
  {
    "name": "John Doe",
    "all_activities": [
      "reading",
      "swimming",
      "programming",
      "design"
    ]
  },
  {
    "name": "Jane Smith",
    "all_activities": [
      "hiking",
      "cooking",
      "marketing",
      "analysis"
    ]
  }
]
```

## Ejemplos de código
<a name="concatArrays-code"></a>

Para ver un ejemplo de código para usar el `$concatArrays` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('mydb');
  const collection = db.collection('mycollection');

  const result = await collection.aggregate([
    {
      $project: {
        _id: 0,
        name: 1,
        all_activities: { $concatArrays: ['$hobbies', '$skills'] }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['mydb']
    collection = db['mycollection']

    result = list(collection.aggregate([
        {
            '$project': {
                '_id': 0,
                'name': 1,
                'all_activities': { '$concatArrays': ['$hobbies', '$skills'] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1cond
<a name="cond"></a>

El `$cond` operador de Amazon DocumentDB se utiliza para evaluar una expresión condicional y devolver una de las dos posibles expresiones de resultado.

**Parámetros**
+ `if`: La expresión booleana que se va a evaluar.
+ `then`: La expresión que se devolverá si la `if` expresión es verdadera.
+ `else`: La expresión que se devolverá si la `if` expresión es falsa.

## Ejemplo (MongoDB Shell)
<a name="cond-examples"></a>

El siguiente ejemplo demuestra el uso del `$cond` operador para devolver un valor basado en la edad de una persona.

**Cree documentos de muestra**

```
db.people.insertMany([
  { _id: 1, name: "John Doe", age: 35 },
  { _id: 2, name: "Jane Doe", age: 25 },
  { _id: 3, name: "Bob Smith", age: 65 }
]);
```

**Ejemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      name: 1,
      ageGroup: {
        $cond: {
          if: { $lt: ["$age", 30] },
          then: "young",
          else: {
            $cond: {
              if: { $lt: ["$age", 65] },
              then: "middle-aged",
              else: "elderly"
            }
          }
        }
      }
    }
  }
])
```

**Salida**

```
[
  { "_id" : 1, "name" : "John Doe", "ageGroup" : "middle-aged" },
  { "_id" : 2, "name" : "Jane Doe", "ageGroup" : "young" },
  { "_id" : 3, "name" : "Bob Smith", "ageGroup" : "elderly" }
]
```

## Ejemplos de código
<a name="cond-code"></a>

Para ver un ejemplo de código para usar el `$cond` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('people');

  const result = await collection.aggregate([
    { $project: {
        name: 1,
        ageGroup: {
            $cond: {
                if: { $lt: ["$age", 30] },
                then: "young",
                else: {
                    $cond: {
                        if: { $lt: ["$age", 65] },
                        then: "middle-aged",
                        else: "elderly"
                    }
                }
            }
        }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient


def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.people

    result = list(collection.aggregate([
        {
            '$project': {
                'name': 1,
                'ageGroup': {
                    '$cond': {
                        'if': { '$lt': ["$age", 30]},
                        'then': "young",
                        'else': {
                            '$cond': {
                                'if': { '$lt': ["$age", 65]},
                                'then': "middle-aged",
                                'else': "elderly"
                            }
                        }
                    }
                }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1convert
<a name="convert"></a>

Novedades de la versión 4.0

El `$convert` operador de Amazon DocumentDB se utiliza para convertir un valor de un tipo de datos a otro. Este operador resulta útil cuando necesita realizar operaciones con datos de distintos tipos, como convertir una cadena en un número o una fecha en una marca de tiempo.

**Parámetros**
+ `to`: el tipo de datos de destino al que se va a convertir el valor. Los valores admitidos son `"string"`, `"double"`, `"long"`, `"int"` y `"date"` y `"boolean"`.
+ `from`: el tipo de datos actual del valor. Si no se especifica, Amazon DocumentDB intentará detectar automáticamente el tipo de datos.
+ `onError`: (opcional) El valor que se devolverá si se produce un error en la conversión. Puede ser un valor específico o uno de los siguientes valores especiales:`"null"`,`"zerofill"`, o`"error"`.
+ `onNull`: (opcional) El valor que se devolverá si el valor de entrada es`null`. Puede ser un valor específico o uno de los siguientes valores especiales:`"null"`,`"zerofill"`, o`"error"`.

## Ejemplo (MongoDB Shell)
<a name="convert-examples"></a>

En el siguiente ejemplo, se muestra la conversión de un valor de cadena en una fecha mediante el `$convert` operador.

**Cree documentos de muestra**

```
db.users.insertMany([
  { _id: 1, name: "John Doe", joinedOn: "2022-01-01" },
  { _id: 2, name: "Jane Smith", joinedOn: "2023-02-15" },
  { _id: 3, name: "Bob Johnson", joinedOn: "invalid date" }
]);
```

**Ejemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      _id: 1,
      name: 1,
      joinedOn: {
        $convert: {
          input: "$joinedOn",
          to: "date",
          onError: "null",
          onNull: "null"
        }
      }
    }
  }
])
```

**Salida**

```
[
  { "_id" : 1, "name" : "John Doe", "joinedOn" : ISODate("2022-01-01T00:00:00Z") },
  { "_id" : 2, "name" : "Jane Smith", "joinedOn" : ISODate("2023-02-15T00:00:00Z") },
  { "_id" : 3, "name" : "Bob Johnson", "joinedOn" : null }
]
```

## Ejemplos de código
<a name="convert-code"></a>

Para ver un ejemplo de código para usar el `$convert` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require("mongodb");

async function example() {
  const client = await MongoClient.connect("mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false");
  const db = client.db("test");
  const users = db.collection("users");

  const results = await users.aggregate([
    {
      $project: {
        _id: 1,
        name: 1,
        joinedOn: {
          $convert: {
            input: "$joinedOn",
            to: "date",
            onError: "null",
            onNull: "null"
          }
        }
      }
    }
  ]).toArray();

  console.log(results);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient("mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false")
    db = client["test"]
    users = db["users"]

    results = list(users.aggregate([
        {
            "$project": {
                "_id": 1,
                "name": 1,
                "joinedOn": {
                    "$convert": {
                        "input": "$joinedOn",
                        "to": "date",
                        "onError": "null",
                        "onNull": "null"
                    }
                }
            }
        }
    ]))

    print(results)
    client.close()

example()
```

------

# \$1count
<a name="count"></a>

La etapa de `$count` agregación de Amazon DocumentDB se utiliza para contar el número de documentos que pasan a la etapa. Suele utilizarse como la etapa final de un proceso de agregación para devolver el recuento total de documentos que coinciden con las etapas anteriores.

**Parámetros**
+ `field`: El campo que se va a contar. Este parámetro es opcional y, si no se proporciona, la etapa contará el número total de documentos ingresados.

## Ejemplo (MongoDB Shell)
<a name="count-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$count` escenario para obtener el número total de documentos de una colección.

**Cree documentos de muestra**

```
db.users.insertMany([
  { name: "John", age: 30 },
  { name: "Jane", age: 25 },
  { name: "Bob", age: 35 },
  { name: "Alice", age: 28 }
]);
```

**Ejemplo de consulta**

```
db.users.aggregate([
  { $count: "total" }
]);
```

**Salida**

```
{ "total" : 4 }
```

El ejemplo agrega la `users` colección y usa el `$count` escenario para contar el número total de documentos.

## Ejemplos de código
<a name="count-code"></a>

Para ver un ejemplo de código para usar el `$count` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function countDocuments() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('mydb');
  const collection = db.collection('users');

  const result = await collection.aggregate([
    { $count: "total" }
  ]).toArray();

  console.log(result[0].total);

  await client.close();
}

countDocuments();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def count_documents():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['mydb']
    collection = db['users']

    result = list(collection.aggregate([
        { '$count': "total" }
    ]))

    print(result[0]['total'])

    client.close()

count_documents()
```

------

# \$1currentOp
<a name="currentOp"></a>

La etapa de `$currentOp` agregación devuelve información sobre las operaciones que se están ejecutando actualmente en la base de datos. Esta etapa es útil para supervisar las consultas y operaciones activas en una canalización de agregación.

**Parámetros**
+ `allUsers`(opcional): si se establece en`true`, devuelve las operaciones de todos los usuarios. El valor predeterminado es `false`.
+ `idleConnections`(opcional): si se establece en`true`, incluye las conexiones inactivas. El valor predeterminado es `false`.
+ `idleCursors`(opcional): cuando se establece en`true`, incluye información sobre los cursores inactivos. El valor predeterminado es `false`.
+ `idleSessions`(opcional): si se establece en`true`, incluye información sobre las sesiones inactivas. El valor predeterminado es `true`.
+ `localOps`(opcional): si se establece en`true`, incluye las operaciones locales. El valor predeterminado es `false`.

## Ejemplo (MongoDB Shell)
<a name="currentOp-examples"></a>

El siguiente ejemplo demuestra el uso de la etapa de `$currentOp` agregación para recuperar información sobre las operaciones de lectura activas.

**Ejemplo de consulta**

```
db.aggregate([
  { $currentOp: { allUsers: true, idleConnections: false } },
  { $match: { op: "query" } }
])
```

**Salida**

```
[
  {
    "opid": "12345",
    "active": true,
    "op": "query",
    "ns": "test.users",
    "secs_running": 2
  }
]
```

## Ejemplos de código
<a name="currentOp-code"></a>

Para ver un ejemplo de código para usar el `$currentOp` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('admin');

  const result = await db.aggregate([
    { $currentOp: { allUsers: true, idleConnections: false } },
    { $match: { op: "query" } }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['admin']

    result = list(db.aggregate([
        { '$currentOp': { 'allUsers': True, 'idleConnections': False } },
        { '$match': { 'op': 'query' } }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1dateAdd
<a name="dateAdd"></a>

Novedades de la versión 5.0

El operador de `$dateAdd` agregación de Amazon DocumentDB le permite añadir una duración a un valor de fecha y hora.

**Parámetros**
+ `date`: un valor de fecha y hora al que añadir una duración.
+ `duration`: la duración que se va a añadir al `date` valor. Se puede especificar como un objeto con claves para `years``months`,`weeks`, `days``hours`,`minutes`, y`seconds`.
+ `timezone`: (opcional) La zona horaria que se utilizará al realizar la suma de fechas. Si no se especifica, se utiliza la zona horaria predeterminada del clúster de Amazon DocumentDB.

## Ejemplo (MongoDB Shell)
<a name="dateAdd-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$dateAdd` operador para añadir 2 días y 12 horas a una fecha.

**Cree documentos de muestra**

```
db.events.insertMany([
  { _id: 1, eventDate: ISODate("2023-04-01T10:00:00Z") },
  { _id: 2, eventDate: ISODate("2023-04-02T12:00:00Z") },
  { _id: 3, eventDate: ISODate("2023-04-03T14:00:00Z") }
]);
```

**Ejemplo de consulta**

```
db.events.aggregate([
  {
    $project: {
      _id: 1,
      eventDate: 1,
      eventDatePlustwodaysandtwelvehours: {
        $dateAdd: {
          startDate: {
            $dateAdd: { 
              startDate: "$eventDate",
              unit: "day",
              amount: 2
            }
          },
          unit: "hour",
          amount: 12
        }
      }
    }
  }
])
```

**Salida**

```
[
  {
    "_id": 1,
    "eventDate": "2023-04-01T10:00:00Z",
    "eventDatePlustwodaysandtwelvehours": ISODate("2023-04-03T22:00:00Z)"
  },
  {
    "_id": 2,
    "eventDate": "2023-04-02T12:00:00Z",
    "eventDatePlustwodaysandtwelvehours": ISODate("2023-04-05T00:00:00Z)"
  },
  {
    "_id": 3,
    "eventDate": "2023-04-03T14:00:00Z",
    "eventDatePlustwodaysandtwelvehours": ISODate("2023-04-06T02:00:00Z)"
  }
]
```

## Ejemplos de código
<a name="dateAdd-code"></a>

Para ver un ejemplo de código para usar el `$dateAdd` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('events');

  const result = await collection.aggregate([
    {
      $project: {
        _id: 1,
        eventDate: 1,
        eventDatePlustwodaysandtwelvehours: {
          $dateAdd: {
            startDate: {
              $dateAdd: {
                startDate: "$eventDate",
                unit: "day",
                amount: 2
              }
            },
            unit: "hour",
            amount: 12
          }
        }
      }
    }
  ]).toArray();

  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient
from bson.date_time import datetime

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['events']

    result = list(collection.aggregate([
        {
            '$project': {
                '_id': 1,
                'eventDate': 1,
                'eventDatePlustwodaysandtwelvehours': {
                    '$dateAdd': {
                        'startDate': {
                            '$dateAdd' : {
                                'startDate': '$eventDate',
                                'unit': 'day',
                                'amount': 2,
                            }
                        },
                        'unit': 'hour',
                        'amount': 12,
                    }
                }
            }
        }
    ]))

    print(result)

    client.close()

example()
```

------

# \$1dateDiff
<a name="dateDiff"></a>

Novedades de la versión 5.0

No es compatible con el clúster de Elastic.

El operador de `$dateDiff` agregación calcula la diferencia entre dos fechas en unidades específicas. Devuelve el número de límites de unidades cruzados entre las fechas de inicio y finalización.

**Parámetros**
+ `startDate`: la expresión de fecha de inicio.
+ `endDate`: La expresión de fecha final.
+ `unit`: La unidad de tiempo de la diferencia. Las unidades compatibles son `year` `quarter``month`,`week`,`day`, `hour``minute`,`second`, y`millisecond`.

## Ejemplo (MongoDB Shell)
<a name="dateDiff-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$dateDiff` operador para calcular el número de días entre la realización del pedido y la entrega.

**Cree documentos de muestra**

```
db.shipments.insertMany([
  {
    orderId: 1001,
    orderDate: ISODate("2025-01-10T08:00:00Z"),
    deliveryDate: ISODate("2025-01-15T14:30:00Z")
  },
  {
    orderId: 1002,
    orderDate: ISODate("2025-02-05T10:00:00Z"),
    deliveryDate: ISODate("2025-02-12T16:45:00Z")
  }
]);
```

**Ejemplo de consulta**

```
db.shipments.aggregate([
  {
    $project: {
      orderId: 1,
      orderDate: 1,
      deliveryDate: 1,
      daysToDeliver: {
        $dateDiff: {
          startDate: "$orderDate",
          endDate: "$deliveryDate",
          unit: "day"
        }
      }
    }
  }
]);
```

**Salida**

```
[
  {
    _id: ObjectId('6924a5f2d66dcae121d29517'),
    orderId: 1001,
    orderDate: ISODate('2025-01-10T08:00:00.000Z'),
    deliveryDate: ISODate('2025-01-15T14:30:00.000Z'),
    daysToDeliver: 5
  },
  {
    _id: ObjectId('6924a5f2d66dcae121d29518'),
    orderId: 1002,
    orderDate: ISODate('2025-02-05T10:00:00.000Z'),
    deliveryDate: ISODate('2025-02-12T16:45:00.000Z'),
    daysToDeliver: 7
  }
]
```

## Ejemplos de código
<a name="dateDiff-code"></a>

Para ver un ejemplo de código para usar el `$dateDiff` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const shipments = db.collection('shipments');
  
  const result = await shipments.aggregate([
    {
      $project: {
        orderId: 1,
        orderDate: 1,
        deliveryDate: 1,
        daysToDeliver: {
          $dateDiff: {
            startDate: "$orderDate",
            endDate: "$deliveryDate",
            unit: "day"
          }
        }
      }
    }
  ]).toArray();
  
  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    shipments = db['shipments']
    
    result = list(shipments.aggregate([
        {
            "$project": {
                "orderId": 1,
                "orderDate": 1,
                "deliveryDate": 1,
                "daysToDeliver": {
                    "$dateDiff": {
                        "startDate": "$orderDate",
                        "endDate": "$deliveryDate",
                        "unit": "day"
                    }
                }
            }
        }
    ]))
    
    print(result)
    client.close()

example()
```

------

# \$1dateFromString
<a name="dateFromString"></a>

El operador de `$dateFromString` agregación de Amazon DocumentDB le permite convertir una cadena de fecha y hora en un objeto de fecha. Esto resulta útil cuando los datos se almacenan como cadenas, pero necesita realizar operaciones basadas en fechas con los datos.

**Parámetros**
+ `dateString`: cadena que representa una fecha y una hora.
+ `format`: (opcional) Una cadena que especifica el formato de`dateString`. Si no se proporciona, Amazon DocumentDB intentará analizar la cadena en el formato ISO-8601.
+ `timezone`: (opcional) Una cadena que especifica la zona horaria. Si no se proporciona, Amazon DocumentDB utilizará la zona horaria del servidor.
+ `onError`: (opcional) Especifica la acción que se debe realizar en caso de que se produzca un error en la conversión. Los valores posibles son `'error'` (el valor predeterminado, que genera un error), `'null'` (devuelve`null`) o `'replace'` (reemplaza el valor por la cadena de reemplazo especificada en la `onErrorMessage` opción).
+ `onErrorMessage`: (opcional) Si `onError` se establece en`'replace'`, esta opción especifica la cadena de reemplazo.

## Ejemplo (MongoDB Shell)
<a name="dateFromString-examples"></a>

El siguiente ejemplo muestra cómo `$dateFromString` convertir una cadena de fecha en un objeto de fecha en Amazon DocumentDB.

**Cree documentos de muestra**

```
db.missionLog.insertMany([
{ _id: 1, event: "missionStart", logDate: "2020-03-15T13:41:33"},
{ _id: 2, event: "jumpPoint1", logDate: "2020-03-15T13:45:34"},
{ _id: 3, event: "jumpPoint2", logDate: "2020-03-15T13:48:21"},
{ _id: 4, event: "jumpPoint3", logDate: "2020-03-15T13:52:09"},
{ _id: 5, event: "missionEnd", logDate: "2020-03-15T13:58:44"}
]);
```

**Ejemplo de consulta**

```
db.missionLog.aggregate([
  {
    $project: {
      event: '$event',
      logDate: {
        $dateFromString: {
          dateString: '$logDate'
        }
      }
    }
  }
]);
```

**Salida**

```
[
  {
    "_id": 1,
    "event": "missionStart",
    "logDate": ISODate("2020-03-15T13:41:33Z")
  },
  {
    "_id": 2,
    "event": "jumpPoint1",
    "logDate": ISODate("2020-03-15T13:45:34Z")
  },
  {
    "_id": 3,
    "event": "jumpPoint2",
    "logDate": ISODate("2020-03-15T13:48:21Z")
  },
  {
    "_id": 4,
    "event": "jumpPoint3",
    "logDate": ISODate("2020-03-15T13:52:09Z")
  },
  {
    "_id": 5,
    "event": "missionEnd",
    "logDate": ISODate("2020-03-15T13:58:44Z")
  }
]
```

## Ejemplos de código
<a name="dateFromString-code"></a>

Para ver un ejemplo de código para usar el `$dateFromString` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('missionLog');

  const result = await collection.aggregate([
    {
      $project: {
        event: '$event',
        logDate: {
          $dateFromString: {
            dateString: '$logDate'
          }
        }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['missionLog']

    result = list(collection.aggregate([
        {
            '$project': {
                'event': '$event',
                'logDate': {
                    '$dateFromString': {
                        'dateString': '$logDate'
                    }
                }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1dateSubtract
<a name="dateSubtract"></a>

Novedades de la versión 5.0

El operador de `$dateSubtract` agregación de Amazon DocumentDB le permite restar una duración específica de un valor de fecha.

**Parámetros**
+ `date`: expresión de fecha que se convierte en una fecha o una marca de tiempo.
+ `subtrahend`: una expresión de duración que especifica la cantidad de tiempo que se va a restar de la expresión. `date`
+ `unit`: cadena que especifica la unidad de tiempo de la `subtrahend` expresión. Las unidades admitidas son «año», «trimestre», «mes», «semana», «día», «hora», «minuto», «segundo» y «milisegundo».

## Ejemplo (MongoDB Shell)
<a name="dateSubtract-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$dateSubtract` operador para calcular la fecha de hace un año a partir de la fecha actual.

**Cree documentos de muestra**

```
db.events.insertOne({
  eventName: "Player joined",
  eventTime: ISODate("2023-04-01T12:00:00Z")
});
```

**Ejemplo de consulta**

```
db.events.aggregate([
  {
    $project: {
      eventName: 1,
      oneYearAgo: {
        $dateSubtract: {
          startDate: "$eventTime",
          amount: 1,
          unit: "year"
        }
      }
    }
  }
])
```

**Salida**

```
{
  "_id" : ObjectId("64567890abcdef012345678"),
  "eventName" : "Player joined",
  "oneYearAgo" : ISODate("2022-04-01T12:00:00Z")
}
```

## Ejemplos de código
<a name="dateSubtract-code"></a>

Para ver un ejemplo de código para usar el `$dateSubtract` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const events = db.collection('events');

  const result = await events.aggregate([
    {
      $project: {
        eventName: 1,
        oneYearAgo: {
          $dateSubtract: {
            startDate: "$eventTime",
            amount: 1,
            unit: "year"
          }
        }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient
from bson.date_time import datetime

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    events = db['events']

    result = list(events.aggregate([
        {
            '$project': {
                'eventName': 1,
                'oneYearAgo': {
                    '$dateSubtract': {
                        'startDate': '$eventTime',
                        'amount': 1,
                        'unit': 'year'
                    }
                }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1dateToString
<a name="dateToString"></a>

El operador de `$dateToString` agregación de Amazon DocumentDB se utiliza para convertir un valor de fecha o marca horaria en una representación de cadena. Esto resulta útil cuando necesita formatear la fecha y la hora de una manera específica para mostrarlas o procesarlas posteriormente.

**Parámetros**
+ `date`: el valor de fecha o marca horaria que se va a convertir en una cadena.
+ `format`: cadena que especifica el formato en el que debe representarse la fecha. La cadena de formato puede incluir varios especificadores de formato, por ejemplo, `%Y` para el año de cuatro dígitos, `%m` para el mes de dos dígitos, `%d` para el día del mes de dos dígitos, etc.
+ `timezone`: (opcional) La zona horaria que se utilizará para la conversión. Si no se especifica, se utiliza la zona horaria del servidor que aloja el clúster de Amazon DocumentDB.
+ `onNull`: (opcional) El valor que se devolverá si el `date` parámetro es`null`.

## Ejemplo (MongoDB Shell)
<a name="dateToString-examples"></a>

El siguiente ejemplo demuestra el uso del `$dateToString` operador para formatear el `logDate` campo de la `missionLog` colección.

**Cree documentos de muestra**

```
db.missionLog.insertMany([
  { _id: 1, "event":"missionStart", logDate: new Date("2020-03-15T13:41:33Z") },
  { _id: 2, "event":"jumpPoint1", logDate: new Date("2020-03-15T13:45:34Z") },
  { _id: 3, "event":"jumpPoint2", logDate: new Date("2020-03-15T13:48:21Z") },
  { _id: 4, "event":"jumpPoint3", logDate: new Date("2020-03-15T13:52:09Z") },
  { _id: 5, "event":"missionEnd", logDate: new Date("2020-03-15T13:58:44Z") }
]);
```

**Ejemplo de consulta**

```
db.missionLog.aggregate([
  {
    $project: {
      event: "$event",
      logDateFormatted: {
        $dateToString: {
          format: "%Y-%m-%d %H:%M:%S",
          date: "$logDate"
        }
      }
    }
  }
])
```

**Salida**

```
[
  {
    "_id": 1,
    "event": "missionStart",
    "logDateFormatted": "2020-03-15 13:41:33"
  },
  {
    "_id": 2,
    "event": "jumpPoint1",
    "logDateFormatted": "2020-03-15 13:45:34"
  },
  {
    "_id": 3,
    "event": "jumpPoint2",
    "logDateFormatted": "2020-03-15 13:48:21"
  },
  {
    "_id": 4,
    "event": "jumpPoint3",
    "logDateFormatted": "2020-03-15 13:52:09"
  },
  {
    "_id": 5,
    "event": "missionEnd",
    "logDateFormatted": "2020-03-15 13:58:44"
  }
]
```

## Ejemplos de código
<a name="dateToString-code"></a>

Para ver un ejemplo de código para usar el `$dateToString` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

A continuación, se muestra un ejemplo del uso del `$dateToString` operador en una aplicación de Node.js:

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('missionLog');

  const result = await collection.aggregate([
    {
      $project: {
        event: "$event",
        logDateFormatted: {
          $dateToString: {
            format: "%Y-%m-%d %H:%M:%S",
            date: "$logDate"
          }
        }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

Este es un ejemplo del uso del `$dateToString` operador en una aplicación de Python:

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['missionLog']

    pipeline = [
        {
            '$project': {
                'event': '$event',
                'logDateFormatted': {
                    '$dateToString': {
                        'format': '%Y-%m-%d %H:%M:%S',
                        'date': '$logDate'
                    }
                }
            }
        }
    ]

    result = list(collection.aggregate(pipeline))
    print(result)
    client.close()

example()
```

------

# \$1dateTrunc
<a name="dateTrunc"></a>

Novedades de la versión 8.0

No es compatible con el clúster de Elastic.

El operador de `$dateTrunc` agregación de Amazon DocumentDB trunca una fecha a una unidad específica.

**Parámetros**
+ `date`: expresión de fecha que se convierte en una fecha o una marca de tiempo.
+ `unit`: cadena que especifica la unidad de tiempo de la expresión de sustracción. Las unidades admitidas son `year``quarter`,`month`,`week`,`day`, `hour` `minute``second`, y. `millisecond`

## Ejemplo (MongoDB Shell)
<a name="dateTrunc-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$dateTrunc` operador para truncar una fecha y convertirla en una hora.

**Cree documentos de muestra**

```
db.events.insertMany([
  {
    eventName: "Event 1",
    eventTime: ISODate("2025-04-01T12:15:00Z")
  },
  {
    eventName: "Event 2",
    eventTime: ISODate("2025-08-15T14:33:22Z")
  },
]);
```

**Ejemplo de consulta**

```
db.events.aggregate([
  {
    $project: {
      eventName: 1,
      eventTime: 1,
      truncatedToHour: {
        $dateTrunc: {
          date: "$eventTime",
          unit: "hour"
        }
      }
    }
  }
]);
```

**Salida**

```
[
  {
    _id: ObjectId('6924a258d66dcae121d29515'),
    eventName: 'Event 1',
    eventTime: ISODate('2025-04-01T12:15:00.000Z'),
    truncatedToHour: ISODate('2025-04-01T12:00:00.000Z')
  },
  {
    _id: ObjectId('6924a258d66dcae121d29516'),
    eventName: 'Event 2',
    eventTime: ISODate('2025-08-15T14:33:22.000Z'),
    truncatedToHour: ISODate('2025-08-15T14:00:00.000Z')
  }
]
```

## Ejemplos de código
<a name="dateTrunc-code"></a>

Para ver un ejemplo de código para usar el `$dateTrunc` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const events = db.collection('events');
  
  const result = await events.aggregate([
    {
      $project: {
        eventName: 1,
        eventTime: 1,
        truncatedToHour: {
          $dateTrunc: {
            date: "$eventTime",
            unit: "hour"
          }
        }
      }
    }
  ]).toArray();
  
  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    events = db['events']
    
    result = list(events.aggregate([
        {
            "$project": {
                "eventName": 1,
                "eventTime": 1,
                "truncatedToHour": {
                    "$dateTrunc": {
                        "date": "$eventTime",
                        "unit": "hour"
                    }
                }
            }
        }
    ]))
    
    print(result)
    client.close()

example()
```

------

# \$1dayOfMonth
<a name="dayOfMonth"></a>

El operador de `$dayOfMonth` agregación de Amazon DocumentDB recupera el día del mes (del 1 al 31) de una fecha determinada. Este operador resulta útil para agrupar, filtrar o extraer el día del mes de los campos de fecha de los documentos.

**Parámetros**
+ `date expression`: la expresión de fecha puede ser un campo de fecha del documento, un objeto de fecha o una cadena de fecha.

## Ejemplo (MongoDB Shell)
<a name="dayOfMonth-examples"></a>

En este ejemplo se muestra cómo utilizar el `$dayOfMonth` operador para extraer el día del mes de un campo de fecha del documento.

**Cree documentos de muestra**

```
db.events.insertMany([
  { _id: 1, eventDate: new Date("2022-01-15T12:00:00Z") },
  { _id: 2, eventDate: new Date("2022-02-28T15:30:00Z") },
  { _id: 3, eventDate: new Date("2022-03-01T09:45:00Z") },
  { _id: 4, eventDate: new Date("2022-04-30T23:59:59Z") }
]);
```

**Ejemplo de consulta**

```
db.events.aggregate([
  { $project: {
    eventDay: { $dayOfMonth: "$eventDate" }
  }}
])
```

**Salida**

```
[
  { "_id" : 1, "eventDay" : 15 },
  { "_id" : 2, "eventDay" : 28 },
  { "_id" : 3, "eventDay" : 1 },
  { "_id" : 4, "eventDay" : 30 }
]
```

## Ejemplos de código
<a name="dayOfMonth-code"></a>

Para ver un ejemplo de código para usar el `$dayOfMonth` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const events = db.collection('events');

  const result = await events.aggregate([
    { $project: {
      eventDay: { $dayOfMonth: "$eventDate" }
    }}
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.mydatabase
    events = db.events

    result = list(events.aggregate([
        { "$project": {
            "eventDay": { "$dayOfMonth": "$eventDate" }
        }}
    ]))

    print(result)
    client.close()

example()
```

------

# \$1dayOfWeek
<a name="dayOfWeek"></a>

El `$dayOfWeek` operador de Amazon DocumentDB extrae el día de la semana de un campo de fecha determinado. Devuelve el día de la semana como un número entre 1 (domingo) y 7 (sábado), que es el mismo comportamiento que en MongoDB.

**Parámetros**
+ `date field`: el campo de fecha del que se extrae el día de la semana.

## Ejemplo (MongoDB Shell)
<a name="dayOfWeek-examples"></a>

En este ejemplo se muestra cómo utilizar el `$dayOfWeek` operador para extraer el día de la semana del `date` campo de la colección. `weather`

**Cree documentos de muestra**

```
db.weather.insertMany([
  {
    "temperature": 97.5,
    "humidity": 0.60,
    "date": new Date("2023-04-01")
  },
  {
    "temperature": 95.2,
    "humidity": 0.55,
    "date": new Date("2023-04-02")
  },
  {
    "temperature": 92.8,
    "humidity": 0.65,
    "date": new Date("2023-04-03")
  }
]);
```

**Ejemplo de consulta**

```
db.weather.aggregate([
  {
    $project: {
      dayOfWeek: { $dayOfWeek: "$date" }
    }
  }
]).pretty();
```

**Salida**

```
{ "_id" : ObjectId("64272c6663f4f8ce422c2d91"), "dayOfWeek" : 7 }
{ "_id" : ObjectId("64272c6663f4f8ce422c2d92"), "dayOfWeek" : 1 }
{ "_id" : ObjectId("64272c6663f4f8ce422c2d93"), "dayOfWeek" : 2 }
```

## Ejemplos de código
<a name="dayOfWeek-code"></a>

Para ver un ejemplo de código para usar el `$dayOfWeek` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('weather');

  const result = await collection.aggregate([
    {
      $project: {
        dayOfWeek: { $dayOfWeek: '$date' }
      }
    }
  ]).toArray();

  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def main():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.weather

    result = list(collection.aggregate([
        {
            '$project': {
                'dayOfWeek': { '$dayOfWeek': '$date' }
            }
        }
    ]))

    print(result)

    client.close()

if __name__ == '__main__':
    main()
```

------

# \$1dayOfYear
<a name="dayOfYear"></a>

El `$dayOfYear` operador de Amazon DocumentDB devuelve el día del año de una fecha como un número entre 1 y 366 (365 en los años no bisiestos).

**Parámetros**
+ `expression`: el campo o expresión de fecha del que se extrae el día del año.

## Ejemplo (MongoDB Shell)
<a name="dayOfYear-examples"></a>

En este ejemplo, se muestra cómo utilizar el `$dayOfYear` operador para extraer el día del año de un campo de fecha de una colección de Amazon DocumentDB.

**Cree documentos de muestra**

```
db.weather.insert([
  {
    "temperature" : 97.5,
    "humidity": 0.60,
    "date" : new Date("2023-03-15")
  },
  {
    "temperature" : 82.3,
    "humidity": 0.75,
    "date" : new Date("2023-12-31")
  }
])
```

**Ejemplo de consulta**

```
db.weather.aggregate([
  {
    $project: {
      dayOfYear: { $dayOfYear: "$date" }
    }
  }
]).pretty()
```

**Salida**

```
{ "_id" : ObjectId("642b86fc7d8e07af279bbe63"), "dayOfYear" : 74 }
{ "_id" : ObjectId("642b86fc7d8e07af279bbe64"), "dayOfYear" : 365 }
```

## Ejemplos de código
<a name="dayOfYear-code"></a>

Para ver un ejemplo de código para usar el `$dayOfYear` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('weather');

  const result = await collection.aggregate([
    {
      $project: {
        dayOfYear: { $dayOfYear: "$date" }
      }
    }
  ]).toArray();

  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['weather']

    result = list(collection.aggregate([
        {
            '$project': {
                'dayOfYear': { '$dayOfYear': '$date' }
            }
        }
    ]))

    print(result)

    client.close()

example()
```

------

# \$1divide
<a name="divide"></a>

El `$divide` operador de la canalización de agregación de Amazon DocumentDB se utiliza para dividir un número por otro. Es un operador útil para realizar operaciones matemáticas en campos numéricos de sus documentos.

**Parámetros**
+ `numerator`: El dividendo o el número a dividir.
+ `denominator`: El divisor o el número por el que se va a dividir.

## Ejemplo (MongoDB Shell)
<a name="divide-examples"></a>

En este ejemplo se muestra cómo utilizar el `$divide` operador para calcular la tarifa horaria de los empleados en función de su salario anual y del número de horas de trabajo al año.

**Cree documentos de muestra**

```
db.employees.insertMany([
  { _id: 1, name: "John Doe", salary: 80000, hoursPerYear: 2080 },
  { _id: 2, name: "Jane Smith", salary: 90000, hoursPerYear: 2080 },
  { _id: 3, name: "Bob Johnson", salary: 75000, hoursPerYear: 2080 }
]);
```

**Ejemplo de consulta**

```
db.employees.aggregate([
  {
    $project: {
      name: 1,
      hourlyRate: { $divide: ["$salary", "$hoursPerYear"] }
    }
  }
])
```

**Salida**

```
[
  { "_id" : 1, "name" : "John Doe", "hourlyRate" : 38.46153846153846 },
  { "_id" : 2, "name" : "Jane Smith", "hourlyRate" : 43.26923076923077 },
  { "_id" : 3, "name" : "Bob Johnson", "hourlyRate" : 36.05769230769231 }
]
```

## Ejemplos de código
<a name="divide-code"></a>

Para ver un ejemplo de código para usar el `$divide` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function calculateHourlyRate() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const employees = db.collection('employees');

  const result = await employees.aggregate([
    {
      $project: {
        name: 1,
        hourlyRate: { $divide: ["$salary", "$hoursPerYear"] }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

calculateHourlyRate();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def calculate_hourly_rate():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.mydatabase
    employees = db.employees

    result = list(employees.aggregate([
        {
            '$project': {
                'name': 1,
                'hourlyRate': { '$divide': ['$salary', '$hoursPerYear'] }
            }
        }
    ]))

    print(result)
    client.close()

calculate_hourly_rate()
```

------

# \$1eq
<a name="eq-aggregation"></a>

El operador de `$eq` agregación compara dos valores y devuelve `true` si son iguales; de lo contrario, devuelve`false`.

**Parámetros**
+ `expression1`: El primer valor que se va a comparar.
+ `expression2`: El segundo valor que se va a comparar.

## Ejemplo (MongoDB Shell)
<a name="eq-aggregation-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$eq` operador para comprobar si las cantidades de producto coinciden con los valores objetivo.

**Cree documentos de muestra**

```
db.inventory.insertMany([
  { _id: 1, item: "Widget", qty: 50, target: 50 },
  { _id: 2, item: "Gadget", qty: 30, target: 50 },
  { _id: 3, item: "Tool", qty: 50, target: 40 }
]);
```

**Ejemplo de consulta**

```
db.inventory.aggregate([
  {
    $project: {
      item: 1,
      qty: 1,
      target: 1,
      meetsTarget: { $eq: ["$qty", "$target"] }
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, item: 'Widget', qty: 50, target: 50, meetsTarget: true },
  { _id: 2, item: 'Gadget', qty: 30, target: 50, meetsTarget: false },
  { _id: 3, item: 'Tool', qty: 50, target: 40, meetsTarget: false }
]
```

## Ejemplos de código
<a name="eq-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$eq` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('inventory');

  const result = await collection.aggregate([
    {
      $project: {
        item: 1,
        qty: 1,
        target: 1,
        meetsTarget: { $eq: ["$qty", "$target"] }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['inventory']

    result = list(collection.aggregate([
        {
            '$project': {
                'item': 1,
                'qty': 1,
                'target': 1,
                'meetsTarget': { '$eq': ['$qty', '$target'] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1exp
<a name="exp"></a>

Novedades de la versión 4.0

El `$exp` operador de Amazon DocumentDB le permite elevar la constante e a un número determinado.

**Parámetros**
+ `expression`: La expresión que se va a evaluar. Puede ser cualquier expresión de agregación válida, incluidas las referencias de campo, las operaciones aritméticas y otras etapas de agregación.

## Ejemplo (MongoDB Shell)
<a name="exp-examples"></a>

El siguiente ejemplo demuestra el uso del `$exp` operador para buscar todos los documentos en los que el `quantity` campo es mayor que el `price` campo.

**Cree documentos de muestra**

```
db.items.insertMany([
  { item: "canvas", quantity: 4 },
  { item: "journal", quantity: 2 }
]);
```

**Ejemplo de consulta**

```
db.items.aggregate([
  { $project: {
    "quantityRaised": {$exp: "$quantity"}}
  }
]);
```

**Salida**

```
[
  {
    _id: ObjectId('6920b785311cf98b79d2950d'),
    quantityRaised: 54.598150033144236
  },
  {
    _id: ObjectId('6920b785311cf98b79d2950e'),
    quantityRaised: 7.38905609893065
  }
]
```

## Ejemplos de código
<a name="exp-code"></a>

Para ver un ejemplo de código para usar el `$exp` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function aggregateExp() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const items = db.collection('items');

  const result = await items.aggregate([
    { $project: {
      "quantityRaised": {$exp: "$quantity"}}
    }
    ]).toArray();

  console.log(result);
  client.close();
}

aggregateExp();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def aggregate_exp():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    items = db.items

    result = list(items.aggregate([
      { "$project": {
        "quantityRaised": {"$exp": "$quantity"}}
      }
    ]))

    print(result)
    client.close()

aggregate_exp()
```

------

# \$1filter
<a name="filter"></a>

El `$filter` operador de Amazon DocumentDB se utiliza para aplicar una expresión de filtro a cada elemento de una matriz y devolver una matriz que contiene solo los elementos que cumplen la condición especificada. Este operador resulta útil cuando necesita realizar operaciones de filtrado complejas en los campos matriciales de sus documentos.

**Parámetros**
+ `input`: El campo de matriz que se va a filtrar.
+ `as`: el nombre de la variable que se utilizará para cada elemento de la `input` matriz dentro de la `cond` expresión.
+ `cond`: La expresión booleana que determina si un elemento determinado debe incluirse en la matriz de salida.

## Ejemplo (MongoDB Shell)
<a name="filter-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$filter` operador para proyectar el cliente de cada pedido y crear un nuevo campo matricial paiItems que contenga únicamente los artículos de la matriz items cuyo precio sea superior a 15. Básicamente, filtra los artículos de cada pedido para incluir solo los productos que cuestan más de 15€.

**Crea documentos de muestra**

```
db.orders.insertMany([
  { _id: 1, customer: "abc123", items: [
    { name: "Product A", price: 10, qty: 2 },
    { name: "Product B", price: 20, qty: 1 }
  ]},
  { _id: 2, customer: "def456", items: [
    { name: "Product C", price: 5, qty: 3 },
    { name: "Product D", price: 15, qty: 4 }
  ]},
  { _id: 3, customer: "ghi789", items: [
    { name: "Product E", price: 8, qty: 3 },
    { name: "Product F", price: 12, qty: 1 }
  ]}
]);
```

**Ejemplo de consulta**

```
db.orders.aggregate([
  {
    $project: {
      customer: 1,
      paidItems: {
        $filter: {
          input: "$items",
          as: "item",
          cond: { $gt: ["$$item.price", 15] }
        }
      }
    }
  }
]).pretty();
```

**Salida**

```
[
  {
    _id: 1,
    customer: 'abc123',
    paidItems: [ { name: 'Product B', price: 20, qty: 1 } ]
  },
  { _id: 2, customer: 'def456', paidItems: [] },
  { _id: 3, customer: 'ghi789', paidItems: [] }
]
```

## Ejemplos de código
<a name="filter-code"></a>

Para ver un ejemplo de código para usar el `$filter` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const uri = 'mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false';
  const client = new MongoClient(uri);

  try {
    await client.connect();

    const db = client.db('test');
    const collection = db.collection('orders');

    const result = await collection.aggregate([
      {
        $project: {
          customer: 1,
          paidItems: {
            $filter: {
              input: "$items",
              as: "item",
              cond: { $gt: ["$$item.price", 15] }
            }
          }
        }
      }
    ]).toArray();

    console.log(JSON.stringify(result, null, 2));

  } catch (error) {
    console.error('Error:', error);
  } finally {
    await client.close();
  }
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient
from pprint import pprint

def example():
    uri = 'mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'
    
    with MongoClient(uri) as client:
        db = client.test
        collection = db.orders

        result = list(collection.aggregate([
            {
                '$project': {
                    'customer': 1,
                    'paidItems': {
                        '$filter': {
                            'input': '$items',
                            'as': 'item',
                            'cond': { '$gt': ['$$item.price', 15] }
                        }
                    }
                }
            }
        ]))

        for doc in result:
            pprint(doc)

example()
```

------

# \$1first
<a name="first"></a>

Nuevo desde la versión 5.0.

No es compatible con el clúster de Elastic.

El `$first` operador de Amazon DocumentDB devuelve el primer documento de un conjunto agrupado de documentos. Se suele utilizar en las canalizaciones de agregación para recuperar el primer documento que cumple una condición específica.

**Parámetros**
+ `expression`: La expresión que se devolverá como el primer valor de cada grupo.

## Ejemplo (MongoDB Shell)
<a name="first-examples"></a>

El siguiente ejemplo demuestra el uso del `$first` operador para recuperar el primer valor de elemento encontrado para cada categoría durante la agregación.

Nota: `$first` devuelve el primer documento en función del orden actual de los documentos en proceso. Para garantizar un orden específico (por ejemplo, por fecha, precio, etc.), se debe utilizar una `$sort` etapa antes de la `$group` etapa.

**Cree documentos de muestra**

```
db.products.insertMany([
  { _id: 1, item: "abc", price: 10, category: "food" },
  { _id: 2, item: "jkl", price: 20, category: "food" },
  { _id: 3, item: "xyz", price: 5, category: "toy" },
  { _id: 4, item: "abc", price: 5, category: "toy" }
]);
```

**Ejemplo de consulta**

```
db.products.aggregate([
  { $group: { _id: "$category", firstItem: { $first: "$item" } } }
]);
```

**Salida**

```
[
  { "_id" : "food", "firstItem" : "abc" },
  { "_id" : "toy", "firstItem" : "xyz" }
]
```

## Ejemplos de código
<a name="first-code"></a>

Para ver un ejemplo de código para usar el `$first` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const uri = 'mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false';
  const client = new MongoClient(uri);

  try {
    await client.connect();

    const db = client.db('test');
    const collection = db.collection('products');

    const result = await collection.aggregate([
      { $group: { _id: "$category", firstItem: { $first: "$item" } } }
    ]).toArray();

    console.log(result);

  } catch (error) {
    console.error('Error:', error);
  } finally {
    await client.close();
  }
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient
from pprint import pprint

def example():
    client = None
    try:
        client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

        db = client['test']
        collection = db['products']

        result = list(collection.aggregate([
            { '$group': { '_id': '$category', 'firstItem': { '$first': '$item' } } }
        ]))

        pprint(result)

    except Exception as e:
        print(f"An error occurred: {e}")

    finally:
        if client:
            client.close()

example()
```

------

# \$1floor
<a name="floor"></a>

Nuevo desde la versión 4.0.

El `$floor` operador de Amazon DocumentDB devuelve el entero más grande que sea menor o igual que el número especificado. Este operador es útil para redondear valores numéricos.

**Parámetros**
+ `expression`: la expresión numérica que se va a redondear hacia abajo.

## Ejemplo (MongoDB Shell)
<a name="floor-examples"></a>

El siguiente ejemplo demuestra el uso del `$floor` operador para redondear un valor decimal al entero más cercano.

**Cree documentos de muestra**

```
db.numbers.insertOne({ value: 3.14 });
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  { $project: { _id: 0, floored: { $floor: "$value" } } }
]);
```

**Salida**

```
{ "floored" : 3 }
```

## Ejemplos de código
<a name="floor-code"></a>

Para ver un ejemplo de código para usar el `$floor` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const uri = 'mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false';
  const client = new MongoClient(uri);

  try {
    await client.connect();

    const db = client.db('test');
    const collection = db.collection('numbers');

    const result = await collection.aggregate([
      { $project: { _id: 0, floored: { $floor: "$value" } } }
    ]).toArray();

    console.log(result);

  } catch (error) {
    console.error('Error:', error);
  } finally {
    await client.close();
  }
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient
from pprint import pprint

def example():
    client = None
    try:
        client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

        db = client.test
        collection = db.numbers

        result = list(collection.aggregate([
            { '$project': { '_id': 0, 'floored': { '$floor': '$value' }}}
        ]))

        pprint(result)

    except Exception as e:
        print(f"An error occurred: {e}")

    finally:
        if client:
            client.close()

example()
```

------

# \$1geoNear
<a name="geoNear"></a>

La etapa de `$geoNear` agregación devuelve los documentos en orden de proximidad a un punto específico. Calcula la distancia desde el punto e incluye la distancia en los documentos de salida.

**Parámetros**
+ `near`: el punto desde el que se calculan las distancias, especificado como GeoJSON o coordenadas heredadas.
+ `distanceField`: el nombre del campo para almacenar la distancia calculada.
+ `spherical`: booleano que indica si se debe utilizar geometría esférica (obligatorio para los puntos GeoJSON).
+ `maxDistance`: opcional. Distancia máxima desde el punto central.
+ `minDistance`: opcional. Distancia mínima desde el punto central.
+ `query`: opcional. Criterios de filtro adicionales que se deben aplicar.
+ `limit`: opcional. Número máximo de documentos a devolver.
+ `key`: opcional. Campo que se utilizará para la consulta geoespacial cuando existen varios índices geoespaciales.

## Ejemplo (MongoDB Shell)
<a name="geoNear-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$geoNear` escenario para buscar las tiendas más cercanas a una ubicación determinada.

**Cree documentos de muestra**

```
db.stores.createIndex({ location: "2dsphere" });

db.stores.insertMany([
  { _id: 1, name: "Store A", location: { type: "Point", coordinates: [-122.4, 37.8] } },
  { _id: 2, name: "Store B", location: { type: "Point", coordinates: [-122.5, 37.7] } },
  { _id: 3, name: "Store C", location: { type: "Point", coordinates: [-122.3, 37.9] } }
]);
```

**Ejemplo de consulta**

```
db.stores.aggregate([
  {
    $geoNear: {
      near: { type: "Point", coordinates: [-122.4, 37.8] },
      distanceField: "distance",
      spherical: true
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, name: 'Store A', location: { type: 'Point', coordinates: [ -122.4, 37.8 ] }, distance: 0 },
  { _id: 3, name: 'Store C', location: { type: 'Point', coordinates: [ -122.3, 37.9 ] }, distance: 13877.82 },
  { _id: 2, name: 'Store B', location: { type: 'Point', coordinates: [ -122.5, 37.7 ] }, distance: 15557.89 }
]
```

## Ejemplos de código
<a name="geoNear-code"></a>

Para ver un ejemplo de código para usar la etapa de `$geoNear` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('stores');

  const result = await collection.aggregate([
    {
      $geoNear: {
        near: { type: "Point", coordinates: [-122.4, 37.8] },
        distanceField: "distance",
        spherical: true
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['stores']

    result = list(collection.aggregate([
        {
            '$geoNear': {
                'near': { 'type': 'Point', 'coordinates': [-122.4, 37.8] },
                'distanceField': 'distance',
                'spherical': True
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1group
<a name="group"></a>

La etapa de `$group` agregación de Amazon DocumentDB le permite agrupar los documentos según una expresión específica y realizar diversas operaciones acumulativas en los datos agrupados. Esto puede resultar útil para tareas como calcular totales, promedios u otras estadísticas en función de los datos agrupados.

**Parámetros**
+ `_id`: especifica la expresión con la que se deben agrupar los documentos de entrada. Puede ser un nombre de campo, una expresión calculada o una combinación de ambos.
+ `accumulator expressions`: (opcional) Una o más expresiones acumulativas que se deben aplicar a los datos agrupados. Estas expresiones utilizan los operadores acumuladores mencionados anteriormente.

## Ejemplo (MongoDB Shell)
<a name="group-examples"></a>

En el siguiente ejemplo, se agrupan los clientes por ciudad y se calcula el importe total del pedido para cada ciudad.

**Cree documentos de muestra**

```
db.customers.insertMany([
  { name: "John Doe", city: "New York", orders: [{ amount: 100 }, { amount: 200 }] },
  { name: "Jane Smith", city: "Los Angeles", orders: [{ amount: 150 }, { amount: 300 }] },
  { name: "Bob Johnson", city: "New York", orders: [{ amount: 75 }, { amount: 125 }] },
  { name: "Samantha Lee", city: "Chicago", orders: [{ amount: 50 }, { amount: 100 }] }
]);
```

**Ejemplo de consulta**

```
db.customers.aggregate([
  {
    $group: {
      _id: "$city",
      totalOrders: { $sum: { $sum: "$orders.amount" } }
    }
  }
]);
```

**Salida**

```
[
  { _id: 'Chicago', totalOrders: 150 },
  { _id: 'Los Angeles', totalOrders: 450 },
  { _id: 'New York', totalOrders: 500 }
]
```

## Ejemplos de código
<a name="group-code"></a>

Para ver un ejemplo de código para usar el `$group` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function groupByCity() {
  const uri = 'mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false';
  const client = new MongoClient(uri);

  try {
    await client.connect();
    const db = client.db('test');
    const result = await db.collection('customers').aggregate([
      { $unwind: '$orders' },
      {
        $group: {
          _id: '$city',
          totalOrders: { $sum: '$orders.amount' }
        }
      }
    ]).toArray();

    console.log(result);
  } catch (err) {
    console.error('Error during aggregation:', err);
  } finally {
    await client.close();
  }
}

groupByCity();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def group_by_city():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    
    try:
        db = client.test
        result = list(db.customers.aggregate([
            {'$unwind': '$orders'},
            {
                '$group': {
                    '_id': '$city',
                    'totalOrders': {'$sum': '$orders.amount'}
                }
            }
        ]))
        print(result)
    except Exception as e:
        print(f"Error during aggregation: {e}")
    finally:
        client.close()

group_by_city()
```

------

# \$1gt
<a name="gt-aggregation"></a>

El operador de `$gt` agregación compara dos valores y devuelve `true` si el primer valor es mayor que el segundo; de lo contrario, devuelve`false`.

**Parámetros**
+ `expression1`: El primer valor que se va a comparar.
+ `expression2`: El segundo valor que se va a comparar.

## Ejemplo (MongoDB Shell)
<a name="gt-aggregation-examples"></a>

El siguiente ejemplo demuestra el uso del `$gt` operador para identificar los productos que superan un umbral de precio.

**Cree documentos de muestra**

```
db.products.insertMany([
  { _id: 1, name: "Laptop", price: 1200 },
  { _id: 2, name: "Mouse", price: 25 },
  { _id: 3, name: "Monitor", price: 400 }
]);
```

**Ejemplo de consulta**

```
db.products.aggregate([
  {
    $project: {
      name: 1,
      price: 1,
      expensive: { $gt: ["$price", 100] }
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, name: 'Laptop', price: 1200, expensive: true },
  { _id: 2, name: 'Mouse', price: 25, expensive: false },
  { _id: 3, name: 'Monitor', price: 400, expensive: true }
]
```

## Ejemplos de código
<a name="gt-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$gt` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('products');

  const result = await collection.aggregate([
    {
      $project: {
        name: 1,
        price: 1,
        expensive: { $gt: ["$price", 100] }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['products']

    result = list(collection.aggregate([
        {
            '$project': {
                'name': 1,
                'price': 1,
                'expensive': { '$gt': ['$price', 100] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1gte
<a name="gte-aggregation"></a>

El operador de `$gte` agregación compara dos valores y devuelve `true` si el primer valor es mayor o igual que el segundo; de lo contrario, devuelve`false`.

**Parámetros**
+ `expression1`: el primer valor que se va a comparar.
+ `expression2`: El segundo valor que se va a comparar.

## Ejemplo (MongoDB Shell)
<a name="gte-aggregation-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$gte` operador para comprobar si los estudiantes han aprobado un examen.

**Cree documentos de muestra**

```
db.students.insertMany([
  { _id: 1, name: "Alice", score: 85 },
  { _id: 2, name: "Bob", score: 60 },
  { _id: 3, name: "Charlie", score: 72 }
]);
```

**Ejemplo de consulta**

```
db.students.aggregate([
  {
    $project: {
      name: 1,
      score: 1,
      passed: { $gte: ["$score", 70] }
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, name: 'Alice', score: 85, passed: true },
  { _id: 2, name: 'Bob', score: 60, passed: false },
  { _id: 3, name: 'Charlie', score: 72, passed: true }
]
```

## Ejemplos de código
<a name="gte-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$gte` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('students');

  const result = await collection.aggregate([
    {
      $project: {
        name: 1,
        score: 1,
        passed: { $gte: ["$score", 70] }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['students']

    result = list(collection.aggregate([
        {
            '$project': {
                'name': 1,
                'score': 1,
                'passed': { '$gte': ['$score', 70] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1hour
<a name="hour"></a>

El `$hour` operador extrae el componente de hora de un campo de fecha o marca de hora.

**Parámetros**
+ `dateExpression`: la fecha a la que se aplica el operador. Esto debe resolverse en una fecha BSON válida (por ejemplo, un campo como \$1createdAt o una fecha literal).

Un parámetro también se puede especificar como un documento con el siguiente formato:

\$1fecha:`&lt;dateExpression&gt;`, zona horaria:\$1 `&lt;timezoneExpression&gt;`

Esto permite aplicar operaciones de fecha que tengan en cuenta la zona horaria.

```
- `<tzExpression>`: (optional) The timezone of the operation result. It must be a valid expression that resolves to a string formatted as either an Olson Timezone Identifier or a UTC Offset. If no timezone is provided, the result is in UTC.
```

## Ejemplo (MongoDB Shell)
<a name="hour-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$hour` operador para extraer el componente de hora de un campo de fecha y agrupar los datos en consecuencia.

**Cree documentos de muestra**

```
db.events.insertMany([
  { timestamp: new Date("2023-04-01T10:30:00Z") },
  { timestamp: new Date("2023-04-01T12:45:00Z") },
  { timestamp: new Date("2023-04-02T08:15:00Z") },
  { timestamp: new Date("2023-04-02T16:20:00Z") },
  { timestamp: new Date("2023-04-03T23:59:00Z") }
]);
```

**Ejemplo de consulta**

```
db.events.aggregate([
  {
    $project: {
      hour: { $hour: "$timestamp" }
    }
  },
  {
    $group: {
      _id: "$hour",
      count: { $sum: 1 }
    }
  },
  {
    $sort: { _id: 1 }
  }
]);
```

**Salida**

```
[
  { "_id": 8, "count": 1 },
  { "_id": 10, "count": 1 },
  { "_id": 12, "count": 1 },
  { "_id": 16, "count": 1 },
  { "_id": 23, "count": 1 }
]
```

Esta consulta agrupa los eventos por el componente horario del `timestamp` campo y cuenta el número de eventos de cada hora.

## Ejemplos de código
<a name="hour-code"></a>

Para ver un ejemplo de código para usar el `$hour` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = new MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  
  try {
    await client.connect();
    const db = client.db('test');
    const collection = db.collection('events');

    const result = await collection.aggregate([
      {
        $project: {
          hour: { $hour: "$timestamp" }
        }
      },
      {
        $group: {
          _id: "$hour",
          count: { $sum: 1 }
        }
      },
      {
        $sort: { _id: 1 }
      }
    ]).toArray();

    console.log(result);
  } catch (error) {
    console.error('Error occurred:', error);
  } finally {
    await client.close();
  }
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient
from datetime import datetime

def example():
    try:
        client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
        
        db = client.test
        collection = db.events

        result = list(collection.aggregate([
            {
                "$project": {
                    "hour": {"$hour": "$timestamp"}
                }
            },
            {
                "$group": {
                    "_id": "$hour",
                    "count": {"$sum": 1}
                }
            },
            {
                "$sort": {"_id": 1}
            }
        ]))

        print(result)

    except Exception as e:
        print(f"An error occurred: {e}")
    
    finally:
        client.close()

example()
```

------

# \$1ifNull
<a name="ifNull"></a>

El `$ifNull` operador se utiliza para devolver un valor especificado si la expresión de entrada se evalúa como nula o indefinida. Este operador puede resultar útil en situaciones en las que desee proporcionar un valor predeterminado o gestionar null/undefined casos.

**Parámetros**
+ `expression`: La expresión que se va a evaluar.
+ `replacement`: El valor que se devolverá si la `<expression>` evaluación es nula o indefinida.

## Ejemplo (MongoDB Shell)
<a name="ifNull-examples"></a>

El siguiente ejemplo demuestra el uso del `$ifNull` operador para proporcionar un valor predeterminado cuando el `name` campo es nulo o no está definido.

**Cree documentos de muestra**

```
db.users.insertMany([
  { _id: 1, name: "John" },
  { _id: 2, name: null },
  { _id: 3 }
]);
```

**Ejemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      _id: 1,
      name: { $ifNull: ["$name", "No Name"] }
    }
  }
]);
```

**Salida**

```
[
  { "_id": 1, "name": "John" },
  { "_id": 2, "name": "No Name" },
  { "_id": 3, "name": "No Name" }
]
```

## Ejemplos de código
<a name="ifNull-code"></a>

Para ver un ejemplo de código para usar el `$ifNull` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

  const db = client.db('test');

  const collection = db.collection('users');

  const pipeline = [
    {
      $project: {
        _id: 1,
        name: { $ifNull: ["$name", "No Name"] }
      }
    }
  ];

  const cursor = await collection.aggregate(pipeline);

  await cursor.forEach(doc => {
    console.log(doc);
  });

  await client.close();

}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    
    db = client.test
    collection = db.users

    pipeline = [
        {
            "$project": {
                "_id": 1,
                "name": { "$ifNull": ["$name", "No Name"] }
            }
        }
    ]

    result = collection.aggregate(pipeline)

    for doc in result:
        print(doc)

    client.close()

example()
```

------

# \$1in
<a name="in-aggregation"></a>

El operador de `$in` agregación comprueba si existe un valor específico dentro de una matriz. Devuelve `true` si el valor se encuentra en la matriz o si `false` no.

**Parámetros**
+ `value`: el valor que se va a buscar.
+ `array`: La matriz en la que se va a buscar.

## Ejemplo (MongoDB Shell)
<a name="in-aggregation-examples"></a>

El siguiente ejemplo demuestra el uso del `$in` operador para comprobar si existe una habilidad específica en el conjunto de habilidades de cada empleado.

**Cree documentos de muestra**

```
db.employees.insertMany([
  { _id: 1, name: "Sarah", skills: ["Python", "JavaScript", "SQL"] },
  { _id: 2, name: "Mike", skills: ["Java", "C++", "Go"] },
  { _id: 3, name: "Emma", skills: ["Python", "Ruby", "Rust"] }
]);
```

**Ejemplo de consulta**

```
db.employees.aggregate([
  {
    $project: {
      name: 1,
      hasPython: { $in: ["Python", "$skills"] }
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, name: 'Sarah', hasPython: true },
  { _id: 2, name: 'Mike', hasPython: false },
  { _id: 3, name: 'Emma', hasPython: true }
]
```

## Ejemplos de código
<a name="in-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$in` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('employees');

  const result = await collection.aggregate([
    {
      $project: {
        name: 1,
        hasPython: { $in: ["Python", "$skills"] }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['employees']

    result = list(collection.aggregate([
        {
            '$project': {
                'name': 1,
                'hasPython': { '$in': ['Python', '$skills'] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1indexOfArray
<a name="indexOfArray"></a>

El `$indexOfArray` operador de Amazon DocumentDB se utiliza para buscar el índice de la primera aparición de un elemento especificado en una matriz. Este operador devuelve la posición de índice basada en cero del primer elemento de la matriz que coincide con el valor especificado. Si no se encuentra el valor, devuelve -1.

**Parámetros**
+ `array`: La matriz que se va a buscar.
+ `value`: El valor que se va a buscar en la matriz.
+ `start`: (opcional) La posición de la matriz desde la que iniciar la búsqueda. El valor predeterminado es 0.

## Ejemplo (MongoDB Shell)
<a name="indexOfArray-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el indexOfArray operador \$1 para encontrar el índice de la primera aparición del elemento «mango» en la matriz «fruits» de cada documento.

**Cree documentos de muestra**

```
db.collection.insertMany([
  { _id: 1, fruits: ["apple", "banana", "cherry", "durian"] },
  { _id: 2, fruits: ["mango", "orange", "pineapple"] },
  { _id: 3, fruits: ["kiwi", "lemon", "mango"] }
]);
```

**Ejemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      _id: 1,
      fruitIndex: { $indexOfArray: ["$fruits", "mango"] }
    }
  }
]);
```

**Salida**

```
{ "_id" : 1, "fruitIndex" : 1 }
{ "_id" : 2, "fruitIndex" : 0 }
{ "_id" : 3, "fruitIndex" : 2 }
```

## Ejemplos de código
<a name="indexOfArray-code"></a>

Para ver un ejemplo de código para usar el `$indexOfArray` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('collection');

  const result = await collection.aggregate([
    {
      $project: {
        _id: 1,
        fruitIndex: { $indexOfArray: ["$fruits", "mango"] }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['collection']

    result = list(collection.aggregate([
        {
            '$project': {
                '_id': 1,
                'fruitIndex': { '$indexOfArray': ["$fruits", "mango"] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1indexOfBytes
<a name="indexOfBytes"></a>

El indexOfBytes operador \$1 de Amazon DocumentDB se utiliza para buscar el índice inicial de una subcadena dentro de otra cadena, en función de las posiciones en bytes de los caracteres. Esto puede resultar útil cuando se trabaja con datos de texto que pueden contener caracteres de varios bytes, como los que se encuentran en alfabetos no latinos.

**Parámetros**
+ `string`: la cadena de entrada que se va a buscar.
+ `substring`: La subcadena que se va a buscar en la cadena de entrada.
+ `[<start>]`: (opcional) La posición inicial (basada en cero) de la búsqueda. Si no se especifica, la búsqueda comienza al principio de la cadena.

## Ejemplo (MongoDB Shell)
<a name="indexOfBytes-examples"></a>

En el siguiente ejemplo se muestra el uso de `$indexOfBytes` para buscar el índice del primer carácter de guión en un conjunto de cadenas que representan la ubicación de los escritorios.

**Cree documentos de muestra**

```
db.people.insertMany([
  { "_id": 1, "Desk": "Düsseldorf-BVV-021" },
  { "_id": 2, "Desk": "Munich-HGG-32a" },
  { "_id": 3, "Desk": "Cologne-ayu-892.50" },
  { "_id": 4, "Desk": "Dortmund-Hop-78" }
]);
```

**Ejemplo de consulta**

```
db.people.aggregate([
  { $project: { stateLocation: { $indexOfBytes: ["$Desk", "-"] } } }
]);
```

**Salida**

```
{ "_id" : 1, "stateLocation" : 11 }
{ "_id" : 2, "stateLocation" : 6 }
{ "_id" : 3, "stateLocation" : 7 }
{ "_id" : 4, "stateLocation" : 8 }
```

## Ejemplos de código
<a name="indexOfBytes-code"></a>

Para ver un ejemplo de código para usar el `$indexOfBytes` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const events = db.collection('people');

  const result = await db.collection('people').aggregate([
    { $project: { stateLocation: { $indexOfBytes: ["$Desk", "-"] } } }
  ]).toArray();
  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['people']
    
    result = list(db.people.aggregate([
        { '$project': { 'stateLocation': { '$indexOfBytes': ['$Desk', '-'] } } }
    ]))
    print(result)
    client.close()

example()
```

------

# \$1indexOfCP
<a name="indexOfCP"></a>

El `$indexOfCP` operador de Amazon DocumentDB se utiliza para buscar el índice, en puntos de código (CP), de la primera aparición de una subcadena especificada dentro de una expresión de cadena. Esto puede resultar útil al analizar y extraer contenido de campos de cadenas.

**Parámetros**
+ `string expression`: La cadena que se va a buscar.
+ `substring`: La subcadena que se va a buscar.
+ `[<start>]`: (opcional) La posición en la que se inicia la búsqueda (índice de base cero). El valor predeterminado es 0.

## Ejemplo (MongoDB Shell)
<a name="indexOfCP-examples"></a>

En este ejemplo, utilizamos el `$indexOfCP` operador para buscar el índice de la primera aparición del carácter de guión, en el campo Escritorio de cada documento.

**Cree documentos de muestra**

```
db.people.insertMany([
  { "_id":1, "name":"John Doe", "Manager":"Jane Doe", "Role":"Developer", "Desk": "Düsseldorf-BVV-021"},
  { "_id":2, "name":"John Stiles", "Manager":"Jane Doe", "Role":"Manager", "Desk": "Munich-HGG-32a"},
  { "_id":3, "name":"Richard Roe", "Manager":"Jorge Souza", "Role":"Product", "Desk": "Cologne-ayu-892.50"},
  { "_id":4, "name":"Mary Major", "Manager":"Jane Doe", "Role":"Solution Architect", "Desk": "Dortmund-Hop-78"}
])
```

**Ejemplo de consulta**

```
db.people.aggregate([
  { $project: { stateLocation: { $indexOfCP: [ "$Desk", "-"] } } }
])
```

**Salida**

```
{ "_id" : 1, "stateLocation" : 10 }
{ "_id" : 2, "stateLocation" : 6 }
{ "_id" : 3, "stateLocation" : 7 }
{ "_id" : 4, "stateLocation" : 8 }
```

## Ejemplos de código
<a name="indexOfCP-code"></a>

Para ver un ejemplo de código para usar el `$indexOfCP` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('people');

  const result = await collection.aggregate([
    { $project: { stateLocation: { $indexOfCP: [ "$Desk", "-"] } } }
  ]).toArray();

  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
collection = db['people']

result = list(collection.aggregate([
    { '$project': { 'stateLocation': { '$indexOfCP': [ '$Desk', '-' ] } } }
]))

print(result)

client.close()
```

------

# \$1indexStats
<a name="indexStats"></a>

La etapa de `$indexStats` agregación de Amazon DocumentDB proporciona información sobre el uso de los índices dentro de una colección. Este operador le permite monitorear los patrones de acceso de sus índices, lo que puede ayudarlo a tomar decisiones informadas sobre la administración y la optimización de los índices.

**Parámetros**

Ninguno

## Ejemplo (MongoDB Shell)
<a name="indexStats-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$indexStats` operador para analizar el uso del índice en una colección de Amazon DocumentDB.

**Cree documentos de muestra**

```
db.grocery.insertMany([
  { _id: 1, product: "milk", quantity: 10 },
  { _id: 2, product: "eggs", quantity: 20 },
  { _id: 3, product: "bread", quantity: 5 },
  { _id: 4, product: "cheese", quantity: 15 },
  { _id: 5, product: "apple", quantity: 8 }
]);
```

**Ejemplo de consulta**

```
db.grocery.aggregate([
  { $indexStats: {} }
]);
```

**Salida**

```
[
  {
    "name": "_id_",
    "key": {
      "_id": 1
    },
    "host": "docdb-cluster-1.cluster-123456789.us-west-2.docdb.amazonaws.com",
    "accesses": {
      "ops": NumberLong(5),
      "since": ISODate("2023-04-06T12:34:56.789Z")
    }
  },
  {
    "name": "product_1",
    "key": {
      "product": 1
    },
    "host": "docdb-cluster-1.cluster-123456789.us-west-2.docdb.amazonaws.com",
    "accesses": {
      "ops": NumberLong(10),
      "since": ISODate("2023-04-06T12:34:56.789Z")
    }
  }
]
```

En este ejemplo, el `$indexStats` operador muestra que se ha accedido al `_id_` índice 5 veces y que se ha accedido al `product_1` índice 10 veces desde el último restablecimiento o reinicio del servidor.

## Ejemplos de código
<a name="indexStats-code"></a>

Para ver un ejemplo de código para usar el `$indexStats` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function indexStats() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const result = await db.collection('grocery').aggregate([
    { $indexStats: {} }
  ]).toArray();
  console.log(result);
  await client.close();
}

indexStats();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def index_stats():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    result = list(db.grocery.aggregate([
        { '$indexStats': {} }
    ]))
    print(result)
    client.close()

index_stats()
```

------

# \$1isArray
<a name="isArray"></a>

El `$isArray` operador de Amazon DocumentDB se utiliza para comprobar si un campo de un documento es una matriz. Este operador puede resultar útil en canalizaciones de agregación y expresiones condicionales para gestionar campos de tipo matriz.

**Parámetros**
+ `field`: La ruta del campo para comprobar si es una matriz.

## Ejemplo (MongoDB Shell)
<a name="isArray-examples"></a>

En este ejemplo se muestra cómo utilizar el `$isArray` operador para identificar documentos en los que el campo «inventario» es una matriz.

**Cree documentos de muestra**

```
db.videos.insertMany([
  { "_id":1, "name":"Live Soft", "inventory": {"Des Moines": 1000, "Ames" : 500}},
  { "_id":2, "name":"Top Pilot", "inventory": {"Mason City": 250, "Des Moines": 1000}},
  { "_id":3, "name":"Romancing the Rock", "inventory": {"Mason City": 250, "Ames" : 500}},
  { "_id":4, "name":"Bravemind", "inventory": [{"location": "Mason City", "count": 250}, {"location": "Des Moines", "count": 1000}, {"location": "Ames", "count": 500}]}
]);
```

**Ejemplo de consulta**

```
db.videos.aggregate([
  {
    $match: {
      $isArray: "$inventory"
    }
  },
  {
    $project: {
      _id: 1,
      name: 1,
      "inventory.location": 1,
      "inventory.count": 1
    }
  }
]).pretty();
```

**Salida**

```
{
  "_id": 4,
  "name": "Bravemind",
  "inventory": [
    {
      "location": "Mason City",
      "count": 250
    },
    {
      "location": "Des Moines",
      "count": 1000
    },
    {
      "location": "Ames",
      "count": 500
    }
  ]
}
```

## Ejemplos de código
<a name="isArray-code"></a>

Para ver un ejemplo de código para usar el `$isArray` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function run() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('videos');

  const result = await collection.aggregate([
    {
      $match: {
        $isArray: '$inventory'
      }
    },
    {
      $project: {
        _id: 1,
        name: 1,
        "inventory.location": 1,
        "inventory.count": 1
      }
    }
  ]).toArray();

  console.log(result);

  await client.close();
}

run();
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
collection = db['videos']

result = list(collection.aggregate([
    {
        '$match': {
            '$isArray': '$inventory'
        }
    },
    {
        '$project': {
            '_id': 1,
            'name': 1,
            'inventory.location': 1,
            'inventory.count': 1
        }
    }
]))

print(result)

client.close()
```

------

# \$1 isoDayOf Semana
<a name="isoDayOfWeek"></a>

El `$isoDayOfWeek` operador de Amazon DocumentDB devuelve el día ISO de la semana de una fecha en forma de valor entero. El sistema ISO de fechas semanales define cada semana a partir de un lunes y termina un domingo, siendo la semana 1 la semana que contiene el primer jueves del año.

**Parámetros**
+ `expression`: la expresión de fecha para la que se devuelve el día ISO de la semana.

## Ejemplo (MongoDB Shell)
<a name="isoDayOfWeek-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$isoDayOfWeek` operador para recuperar el día ISO de la semana de un conjunto de documentos de eventos.

**Cree documentos de muestra**

```
db.events.insertMany([
  { _id: 1, eventDate: ISODate("2023-04-01T12:00:00Z") },
  { _id: 2, eventDate: ISODate("2023-04-02T12:00:00Z") },
  { _id: 3, eventDate: ISODate("2023-04-03T12:00:00Z") },
  { _id: 4, eventDate: ISODate("2023-04-04T12:00:00Z") },
  { _id: 5, eventDate: ISODate("2023-04-05T12:00:00Z") },
  { _id: 6, eventDate: ISODate("2023-04-06T12:00:00Z") },
  { _id: 7, eventDate: ISODate("2023-04-07T12:00:00Z") }
]);
```

**Ejemplo de consulta**

```
db.events.aggregate([
  { $project: {
    _id: 1,
    eventDate: 1,
    isoDayOfWeek: { $isoDayOfWeek: "$eventDate" }
  }}
]);
```

**Salida**

```
[
  { "_id": 1, "eventDate": ISODate("2023-04-01T12:00:00Z"), "isoDayOfWeek": 6 },
  { "_id": 2, "eventDate": ISODate("2023-04-02T12:00:00Z"), "isoDayOfWeek": 7 },
  { "_id": 3, "eventDate": ISODate("2023-04-03T12:00:00Z"), "isoDayOfWeek": 1 },
  { "_id": 4, "eventDate": ISODate("2023-04-04T12:00:00Z"), "isoDayOfWeek": 2 },
  { "_id": 5, "eventDate": ISODate("2023-04-05T12:00:00Z"), "isoDayOfWeek": 3 },
  { "_id": 6, "eventDate": ISODate("2023-04-06T12:00:00Z"), "isoDayOfWeek": 4 },
  { "_id": 7, "eventDate": ISODate("2023-04-07T12:00:00Z"), "isoDayOfWeek": 5 }
]
```

## Ejemplos de código
<a name="isoDayOfWeek-code"></a>

Para ver un ejemplo de código para usar el `$isoDayOfWeek` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const events = db.collection('events');

  const result = await events.aggregate([
    {
      $project: {
        _id: 1,
        eventDate: 1,
        isoDayOfWeek: { $isoDayOfWeek: '$eventDate' }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    events = db.events

    result = list(events.aggregate([
        {
            '$project': {
                '_id': 1,
                'eventDate': 1,
                'isoDayOfWeek': { '$isoDayOfWeek': '$eventDate' }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1isoWeek
<a name="isoWeek"></a>

El `$isoWeek` operador de Amazon DocumentDB devuelve el número de semana ISO de una fecha. El sistema ISO de fechas semanales es una forma de numerar las semanas de un año, en el que la primera semana de un nuevo año es la semana que contiene el primer jueves de ese año. Esto es diferente del calendario gregoriano, donde la primera semana de un nuevo año es la semana que contiene el 1 de enero.

**Parámetros**

Ninguno

## Ejemplo (MongoDB Shell)
<a name="isoWeek-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$isoWeek` operador para recuperar el número de semana ISO de una fecha determinada.

**Cree documentos de muestra**

```
db.dates.insertMany([
  { _id: 1, date: new ISODate("2022-01-01") },
  { _id: 2, date: new ISODate("2022-12-31") },
  { _id: 3, date: new ISODate("2023-01-01") }
])
```

**Ejemplo de consulta**

```
db.dates.aggregate([
  {
    $project: {
      _id: 1,
      isoWeek: { $isoWeek: "$date" }
    }
  }
])
```

**Salida**

```
[
  { "_id": 1, "isoWeek": 52 },
  { "_id": 2, "isoWeek": 52 },
  { "_id": 3, "isoWeek": 1 }
]
```

## Ejemplos de código
<a name="isoWeek-code"></a>

Para ver un ejemplo de código para usar el `$isoWeek` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('dates');

  const result = await collection.aggregate([
    {
      $project: {
        _id: 1,
        isoWeek: { $isoWeek: "$date" }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['dates']

    result = list(collection.aggregate([
        {
            '$project': {
                '_id': 1,
                'isoWeek': { '$isoWeek': '$date' }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1isoWeekYear
<a name="isoWeekYear"></a>

El `$isoWeekYear` operador de Amazon DocumentDB devuelve el número del año semanal ISO 8601 de una fecha determinada. El número del año semanal ISO se diferencia del año civil gregoriano en que el año semanal puede ser diferente del año natural, especialmente al principio y al final del año.

**Parámetros**
+ `expression`: la expresión de fecha para la que se devuelve el número del año semanal ISO 8601.

## Ejemplo (MongoDB Shell)
<a name="isoWeekYear-examples"></a>

En este ejemplo se muestra cómo utilizar el `$isoWeekYear` operador para recuperar el año semanal ISO 8601 para el campo de fecha de cada documento de la colección de eventos.

**Cree documentos de muestra**

```
db.events.insertMany([
  { _id: 1, name: "Event 1", date: ISODate("2022-12-31T00:00:00Z") },
  { _id: 2, name: "Event 2", date: ISODate("2023-01-01T00:00:00Z") },
  { _id: 3, name: "Event 3", date: ISODate("2023-01-02T00:00:00Z") }
]);
```

**Ejemplo de consulta**

```
db.events.aggregate([
  { $project: {
    name: 1,
    isoWeekYear: { $isoWeekYear: "$date" }
  }}
]);
```

**Salida**

```
[
  { "_id" : 1, "name" : "Event 1", "isoWeekYear" : 2023 },
  { "_id" : 2, "name" : "Event 2", "isoWeekYear" : 2023 },
  { "_id" : 3, "name" : "Event 3", "isoWeekYear" : 2023 }
]
```

## Ejemplos de código
<a name="isoWeekYear-code"></a>

Para ver un ejemplo de código para usar el `$isoWeekYear` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const events = db.collection('events');

  const result = await events.aggregate([
    { $project: {
      name: 1,
      isoWeekYear: { $isoWeekYear: '$date' }
    }}
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    events = db.events

    result = list(events.aggregate([
        { '$project': {
            'name': 1,
            'isoWeekYear': { '$isoWeekYear': '$date' }
        }}
    ]))

    print(result)
    client.close()

example()
```

------

# \$1last
<a name="last"></a>

El `$last` operador de Amazon DocumentDB se utiliza para devolver el último elemento de una matriz que coincide con los criterios de consulta. Resulta particularmente útil para recuperar el elemento más reciente o el último de una matriz que cumpla una condición específica.

**Parámetros**
+ `expression`: La expresión que coincide con los elementos de la matriz.

## Ejemplo (MongoDB Shell)
<a name="last-examples"></a>

El siguiente ejemplo demuestra el uso del `$last` operador en combinación con el de `$filter` recuperar el último elemento de una matriz que cumple una condición específica (por ejemplo, el tema es «ciencia»).

**Cree documentos de muestra**

```
db.collection.insertMany([
  {
    "_id": 1,
    "name": "John",
    "scores": [
      { "subject": "math", "score": 82 },
      { "subject": "english", "score": 85 },
      { "subject": "science", "score": 90 }
    ]
  },
  {
    "_id": 2,
    "name": "Jane",
    "scores": [
      { "subject": "math", "score": 92 },
      { "subject": "english", "score": 88 },
      { "subject": "science", "score": 87 }
    ]
  },
  {
    "_id": 3,
    "name": "Bob",
    "scores": [
      { "subject": "math", "score": 75 },
      { "subject": "english", "score": 80 },
      { "subject": "science", "score": 85 }
    ]
  }
]);
```

**Ejemplo de consulta**

```
db.collection.aggregate([
    { $match: { name: "John" } },
    {
      $project: {
        name: 1,
        lastScienceScore: {
          $last: {
            $filter: {
              input: "$scores",
              as: "score",
              cond: { $eq: ["$$score.subject", "science"] }
            }
          }
        }
      }
    }
  ]);
```

**Salida**

```
[
  {
    _id: 1,
    name: 'John',
    lastScienceScore: { subject: 'science', score: 90 }
  }
]
```

## Ejemplos de código
<a name="last-code"></a>

Para ver un ejemplo de código para usar el `$last` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  
  const db = client.db('test');
  const collection = db.collection('collection');

  const result = await collection.aggregate([
    { $match: { name: "John" } },
    {
      $project: {
        name: 1,
        lastScienceScore: {
          $last: {
            $filter: {
              input: "$scores",
              as: "score",
              cond: { $eq: ["$$score.subject", "science"] }
            }
          }
        }
      }
    }
  ]).toArray();

  console.log(JSON.stringify(result, null, 2));
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():

    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

    db = client.test
    collection = db.collection

    pipeline = [
        { "$match": { "name": "John" } },
        {
            "$project": {
                "name": 1,
                "lastScienceScore": {
                    "$last": {
                        "$filter": {
                            "input": "$scores",
                            "as": "score",
                            "cond": { "$eq": ["$$score.subject", "science"] }
                        }
                    }
                }
            }
        }
    ]

    result = list(collection.aggregate(pipeline))

    print(result)

    client.close()

example()
```

------

# \$1let
<a name="let"></a>

El `$let` operador de Amazon DocumentDB se usa para vincular variables a valores y usar esas variables en la expresión. Le permite definir variables locales que se pueden usar en expresiones posteriores dentro de la misma etapa del proceso de agregación.

**Parámetros**
+ `vars`: un objeto que define las variables que se van a utilizar en la expresión.
+ `in`: La expresión en la que se utilizan las variables definidas en el parámetro vars.

## Ejemplo (MongoDB Shell)
<a name="let-examples"></a>

En este ejemplo se muestra el uso del `$let` operador para calcular el área de un rectángulo.

**Cree documentos de muestra**

```
db.shapes.insertMany([
  { name: "Rectangle 1", length: 5, width: 3 },
  { name: "Rectangle 2", length: 7, width: 4 },
  { name: "Rectangle 3", length: 6, width: 2 }
]);
```

**Ejemplo de consulta**

```
db.shapes.aggregate([
  {
    $project: {
      name: 1,
      area: {
        $let: {
          vars: {
            length: "$length",
            width: "$width"
          },
          in: {
            $multiply: ["$$length", "$$width"]
          }
        }
      }
    }
  }
])
```

**Salida**

```
[
  {
    "_id": ObjectId("6161e5b1a3eba3c7f2960d03"),
    "name": "Rectangle 1",
    "area": 15
  },
  {
    "_id": ObjectId("6161e5b1a3eba3c7f2960d04"),
    "name": "Rectangle 2",
    "area": 28
  },
  {
    "_id": ObjectId("6161e5b1a3eba3c7f2960d05"),
    "name": "Rectangle 3",
    "area": 12
  }
]
```

## Ejemplos de código
<a name="let-code"></a>

Para ver un ejemplo de código para usar el `$let` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function calculateRectangleAreas() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('shapes');

  const result = await shapes.aggregate([
    {
      $project: {
        name: 1,
        area: {
          $let: {
            vars: {
              length: '$length',
              width: '$width'
            },
            in: {
              $multiply: ['$$length', '$$width']
            }
          }
        }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

calculateRectangleAreas();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def calculate_rectangle_areas():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.shapes

    result = list(shapes.aggregate([
        {
            '$project': {
                'name': 1,
                'area': {
                    '$let': {
                        'vars': {
                            'length': '$length',
                            'width': '$width'
                        },
                        'in': {
                            '$multiply': ['$$length', '$$width']
                        }
                    }
                }
            }
        }
    ]))

    print(result)
    client.close()

calculate_rectangle_areas()
```

------

# \$1limit
<a name="limit"></a>

El `$limit` operador de Amazon DocumentDB se utiliza para restringir el número de documentos devueltos por una consulta. Es similar al operador `$limit` MongoDB, pero hay que tener en cuenta algunas consideraciones específicas al usarlo con Amazon DocumentDB.

En Amazon DocumentDB, el `$limit` operador es útil para la paginación, en la que se desea recuperar un subconjunto del total de documentos coincidentes. Le permite controlar la cantidad de documentos devueltos en cada respuesta, lo que mejora el rendimiento y reduce la cantidad de datos que se transfieren a través de la red.

**Parámetros**
+ `limit`: El número máximo de documentos que se van a devolver. Debe ser un valor entero no negativo.

## Ejemplo (MongoDB Shell)
<a name="limit-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$limit` operador para devolver un máximo de un documento que coincida con el filtro dado.

**Cree documentos de muestra**

```
db.test.insertMany([
  { "_id": 1, "star_rating": 4, "comments": "apple is red" },
  { "_id": 2, "star_rating": 5, "comments": "comfortable couch" },
  { "_id": 3, "star_rating": 3, "comments": "apples, oranges - healthy fruit" },
  { "_id": 4, "star_rating": 5, "comments": "this is a great couch" },
  { "_id": 5, "star_rating": 5, "comments": "interesting couch" }
]);
```

**Ejemplo de consulta**

```
db.test.createIndex({ comments: "text" });

db.test.find({
  $and: [
    { star_rating: 5 },
    { $text: { $search: "couch" } }
  ]
}).limit(1);
```

**Salida**

```
[ { _id: 2, star_rating: 5, comments: 'comfortable couch' } ]
```

## Ejemplos de código
<a name="limit-code"></a>

Para ver un ejemplo de código para usar el `$limit` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function limitExample() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

  try {
      await client.connect();
      
      const db = client.db('test');
      const collection = db.collection('test');

      await collection.createIndex({ comments: 'text' });

      const query = {
        $and: [
          { star_rating: 5 },
          { $text: { $search: "couch" } }
        ]
      };

      const result = await collection.find(query).limit(1).toArray();

      console.log(result);

    } catch (err) {
        console.error("Error:", err);
    } finally {
        await client.close();
    }

}

limitExample();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def limit_example():
    try:
        client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

        db = client['test']
        collection = db['test']

        collection.create_index([('comments', 'text')])

        query = {
            '$and': [
                {'star_rating': 5},
                {'$text': {'$search': 'couch'}}
            ]
        }

        result = collection.find(query).limit(1)

        for doc in result:
            print(doc)

    except Exception as e:
        print(f"An error occurred: {e}")
    
    finally:
        client.close()

limit_example()
```

------

# \$1literal
<a name="literal"></a>

El `$literal` operador de Amazon DocumentDB se utiliza para representar un valor literal dentro de una etapa de canalización de agregación. Le permite incluir un valor específico, como un número, una cadena o un booleano, sin interpretarlo como una referencia o expresión de campo.

Este operador resulta especialmente útil cuando se necesita incluir un valor literal como parte de una canalización de agregación más compleja, como cuando se crean filtros de consultas dinámicos o se realizan cálculos.

**Parámetros**

Ninguno

## Ejemplo (MongoDB Shell)
<a name="literal-examples"></a>

El siguiente ejemplo demuestra el uso del `$literal` operador para incluir un valor literal en una canalización de agregación. El `$literal` operador se utiliza para incluir el valor 18 como un valor literal en la expresión \$1gt. Esto permite que el proceso de agregación compare el campo de edad con el valor literal 18 para determinar si la persona es adulta.

**Cree documentos de muestra**

```
db.collection.insertMany([
  { "name": "John Doe", "age": 30, "city": "New York" },
  { "name": "Jane Doe", "age": 25, "city": "Los Angeles" },
  { "name": "Bob Smith", "age": 35, "city": "Chicago" }
]);
```

**Ejemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      name: 1,
      age: 1,
      city: 1,
      isAdult: { $gt: ["$age", { $literal: 18 }] }
    }
  }
]);
```

**Salida**

```
[
  {
    "_id": ObjectId("601234567890abcdef012345"),
    "name": "John Doe",
    "age": 30,
    "city": "New York",
    "isAdult": true
  },
  {
    "_id": ObjectId("601234567890abcdef012346"),
    "name": "Jane Doe",
    "age": 25,
    "city": "Los Angeles",
    "isAdult": true
  },
  {
    "_id": ObjectId("601234567890abcdef012347"),
    "name": "Bob Smith",
    "age": 35,
    "city": "Chicago",
    "isAdult": true
  }
]
```

## Ejemplos de código
<a name="literal-code"></a>

Para ver un ejemplo de código para usar el `$literal` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('collection');

  const result = await collection.aggregate([
    {
      $project: {
        name: 1,
        age: 1,
        city: 1,
        isAdult: { $gt: ["$age", { $literal: 18 }] }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.collection

    result = list(collection.aggregate([
        {
            '$project': {
                'name': 1,
                'age': 1,
                'city': 1,
                'isAdult': { '$gt': ["$age", { '$literal': 18 }] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1ln
<a name="ln"></a>

Nuevo desde la versión 4.0.

El `$ln` operador de Amazon DocumentDB calcula el logaritmo natural (base e) de un número especificado. Devuelve el logaritmo del número en la base e.

**Parámetros**
+ `expression`: El número para el que se calculará el logaritmo natural.

## Ejemplo (MongoDB Shell)
<a name="ln-examples"></a>

El siguiente ejemplo demuestra el uso del `$log` operador para calcular el logaritmo natural de un número.

**Cree documentos de muestra**

```
db.numbers.insertMany([
  { _id: 1, value: 10 },
  { _id: 2, value: 100 },
  { _id: 3, value: 1000 }
]);
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  { $project: {
    _id: 1,
    naturalLog: { $ln: "$value" }
  }}
]);
```

**Salida**

```
[
  { "_id" : 1, "naturalLog" : 2.302585092994046 },
  { "_id" : 2, "naturalLog" : 4.605170185988092 },
  { "_id" : 3, "naturalLog" : 6.907755278982137 }
]
```

## Ejemplos de código
<a name="ln-code"></a>

Para ver un ejemplo de código para usar el `$ln` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

  const db = client.db('test');
  const collection = db.collection('numbers');

  const result = await collection.aggregate([
    { $project: {
      _id: 1,
      naturalLog: { $ln: "$value" }
    }}
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
  
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

    db = client.test
    collection = db.numbers

    result = list(collection.aggregate([
        { "$project": {
            "_id": 1,
            "naturalLog": { "$ln": "$value" }
        }}
    ]))

    print(result)
    client.close()

example()
```

------

# \$1log
<a name="log"></a>

Nuevo desde la versión 4.0.

El `$log` operador de Amazon DocumentDB calcula el logaritmo natural de un número. Devuelve el logaritmo en base e del número especificado.

**Parámetros**
+ `expression`: el número para el que se calculará el logaritmo natural.
+ `base`: valor base para calcular el logaritmo.

## Ejemplo (MongoDB Shell)
<a name="log-examples"></a>

El siguiente ejemplo demuestra el uso del `$log` operador para calcular el logaritmo natural de un número.

**Cree documentos de muestra**

```
db.numbers.insertMany([
  { _id: 1, value: 10 },
  { _id: 2, value: 100 },
  { _id: 3, value: 1000 }
]);
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  { $project: {
    _id: 1,
    naturalLog: { $log: ["$value", 10] }
  }}
]);
```

**Salida**

```
[
  { "_id" : 1, "naturalLog" : 1 },
  { "_id" : 2, "naturalLog" : 2 },
  { "_id" : 3, "naturalLog" : 2.9999999999999996 }
]
```

## Ejemplos de código
<a name="log-code"></a>

Para ver un ejemplo de código para usar el `$log` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

  const db = client.db('test');
  const collection = db.collection('numbers');

  const result = await collection.aggregate([
    { $project: {
      _id: 1,
      naturalLog: { $log: ["$value", 10] }
    }}
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    
    db = client.test
    collection = db.numbers

    result = list(collection.aggregate([
        { "$project": {
            "_id": 1,
            "naturalLog": { "$log": ["$value", 10] }
        }}
    ]))

    print(result)
    client.close()

example()
```

------

# \$1log10
<a name="log10"></a>

Nuevo desde la versión 4.0.

El `$log10` operador de Amazon DocumentDB se utiliza para calcular el logaritmo en base 10 de un número. Resulta útil para realizar cálculos logarítmicos en campos numéricos dentro de la canalización de agregación.

**Parámetros**
+ `expression`: La expresión numérica para la que se va a calcular el logaritmo en base 10.

## Ejemplo (MongoDB Shell)
<a name="log10-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$log10` operador para calcular el logaritmo en base 10 de un campo numérico.

**Cree documentos de muestra**

```
db.numbers.insertMany([
  { _id: 1, value: 1 },
  { _id: 2, value: 10 },
  { _id: 3, value: 100 },
  { _id: 4, value: 1000 }
]);
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  {
    $project: {
      _id: 1,
      log10Value: { $log10: "$value" }
    }
  }
]);
```

**Salida**

```
[
  { "_id": 1, "log10Value": 0 },
  { "_id": 2, "log10Value": 1 },
  { "_id": 3, "log10Value": 2 },
  { "_id": 4, "log10Value": 3 }
]
```

## Ejemplos de código
<a name="log10-code"></a>

Para ver un ejemplo de código para usar el `$log10` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  let client;

  try {
    client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
    
    const db = client.db('test');
    const collection = db.collection('numbers');

    const result = await collection.aggregate([
      {
        $project: {
          _id: 1,
          log10Value: { $log10: "$value" }
        }
      }
    ]).toArray();

    console.log(result);
  } catch (error) {
    console.error("An error occurred:", error);
  } finally {
    if (client) {
      await client.close();
    }
  }
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = None
    try:
        client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
        
        db = client.test
        collection = db.numbers

        result = list(collection.aggregate([
            {
                '$project': {
                    '_id': 1,
                    'log10Value': { '$log10': '$value' }
                }
            }
        ]))

        print(result)
    
    except Exception as e:
        print(f"An error occurred: {e}")
    
    finally:
        if client:
            client.close()

example()
```

------

# \$1lt
<a name="lt-aggregation"></a>

El operador de `$lt` agregación compara dos valores y devuelve `true` si el primer valor es menor que el segundo; de lo contrario, devuelve`false`.

**Parámetros**
+ `expression1`: El primer valor que se va a comparar.
+ `expression2`: El segundo valor que se va a comparar.

## Ejemplo (MongoDB Shell)
<a name="lt-aggregation-examples"></a>

El siguiente ejemplo demuestra el uso del `$lt` operador para identificar artículos con pocas existencias.

**Cree documentos de muestra**

```
db.warehouse.insertMany([
  { _id: 1, item: "Bolts", stock: 5 },
  { _id: 2, item: "Nuts", stock: 25 },
  { _id: 3, item: "Screws", stock: 8 }
]);
```

**Ejemplo de consulta**

```
db.warehouse.aggregate([
  {
    $project: {
      item: 1,
      stock: 1,
      lowStock: { $lt: ["$stock", 10] }
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, item: 'Bolts', stock: 5, lowStock: true },
  { _id: 2, item: 'Nuts', stock: 25, lowStock: false },
  { _id: 3, item: 'Screws', stock: 8, lowStock: true }
]
```

## Ejemplos de código
<a name="lt-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$lt` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('warehouse');

  const result = await collection.aggregate([
    {
      $project: {
        item: 1,
        stock: 1,
        lowStock: { $lt: ["$stock", 10] }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['warehouse']

    result = list(collection.aggregate([
        {
            '$project': {
                'item': 1,
                'stock': 1,
                'lowStock': { '$lt': ['$stock', 10] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1lte
<a name="lte-aggregation"></a>

El operador de `$lte` agregación compara dos valores y devuelve `true` si el primer valor es menor o igual que el segundo; de lo contrario, devuelve`false`.

**Parámetros**
+ `expression1`: el primer valor que se va a comparar.
+ `expression2`: El segundo valor que se va a comparar.

## Ejemplo (MongoDB Shell)
<a name="lte-aggregation-examples"></a>

El siguiente ejemplo demuestra el uso del `$lte` operador para identificar artículos asequibles.

**Cree documentos de muestra**

```
db.menu.insertMany([
  { _id: 1, dish: "Salad", price: 8 },
  { _id: 2, dish: "Pasta", price: 12 },
  { _id: 3, dish: "Soup", price: 6 }
]);
```

**Ejemplo de consulta**

```
db.menu.aggregate([
  {
    $project: {
      dish: 1,
      price: 1,
      affordable: { $lte: ["$price", 10] }
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, dish: 'Salad', price: 8, affordable: true },
  { _id: 2, dish: 'Pasta', price: 12, affordable: false },
  { _id: 3, dish: 'Soup', price: 6, affordable: true }
]
```

## Ejemplos de código
<a name="lte-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$lte` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('menu');

  const result = await collection.aggregate([
    {
      $project: {
        dish: 1,
        price: 1,
        affordable: { $lte: ["$price", 10] }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['menu']

    result = list(collection.aggregate([
        {
            '$project': {
                'dish': 1,
                'price': 1,
                'affordable': { '$lte': ['$price', 10] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1lookup
<a name="lookup"></a>

La etapa de `$lookup` agregación de Amazon DocumentDB le permite realizar una unión externa izquierda entre dos colecciones. Esta operación le permite combinar datos de varias colecciones en función de los valores de campo coincidentes. Resulta especialmente útil cuando necesita incorporar datos de colecciones relacionadas en los resultados de las consultas.

**Parámetros**
+ `from`: el nombre de la colección con la que se va a realizar la unión.
+ `localField`: El campo de los documentos de entrada que debe coincidir con el`foreignField`.
+ `foreignField`: El campo de los documentos de la `from` colección que coincide con el`localField`.
+ `as`: el nombre del nuevo campo que se va a añadir a los documentos de salida que contienen los documentos coincidentes de la `from` colección.

## Ejemplo (MongoDB Shell)
<a name="lookup-examples"></a>

El siguiente ejemplo muestra una `$lookup` operación sencilla que une los datos de la `orders` colección en la `customers` colección.

**Cree documentos de muestra**

```
db.customers.insertMany([
  { _id: 1, name: "Alice" },
  { _id: 2, name: "Bob" },
  { _id: 3, name: "Charlie" }
]);

db.orders.insertMany([
  { _id: 1, customer_id: 1, total: 50 },
  { _id: 2, customer_id: 1, total: 100 },
  { _id: 3, customer_id: 2, total: 75 }
]);
```

**Ejemplo de consulta**

```
db.customers.aggregate([
  {
    $lookup: {
      from: "orders",           
      localField: "_id",        
      foreignField: "customer_id", 
      as: "orders" 
    }
  }
]);
```

**Salida**

```
[
  {
    _id: 1,
    name: 'Alice',
    orders: [
      { _id: 2, customer_id: 1, total: 100 },
      { _id: 1, customer_id: 1, total: 50 }
    ]
  },
  { _id: 3, name: 'Charlie', orders: [] },
  {
    _id: 2,
    name: 'Bob',
    orders: [ { _id: 3, customer_id: 2, total: 75 } ]
  }
]
```

## Ejemplos de código
<a name="lookup-code"></a>

Para ver un ejemplo de código para usar el `$lookup` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

  await client.connect();

  const db = client.db('test');

  const result = await db.collection('customers').aggregate([
    {
      $lookup: {
        from: 'orders',
        localField: '_id',
        foreignField: 'customer_id',
        as: 'orders'
      }
    }
  ]).toArray();

  console.log(JSON.stringify(result, null, 2));
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

    db = client.test
    
    collection = db.customers

    pipeline = [
        {
            "$lookup": {
                "from": "orders",
                "localField": "_id",
                "foreignField": "customer_id",
                "as": "orders"
            }
        }
    ]

    result = collection.aggregate(pipeline)

    for doc in result:
        print(doc)

    client.close()

example()
```

------

# \$1ltrim
<a name="ltrim"></a>

Nuevo desde la versión 4.0.

No es compatible con el clúster de Elastic.

El `$ltrim` operador de Amazon DocumentDB se utiliza para eliminar los caracteres principales de una cadena. De forma predeterminada, elimina los espacios en blanco iniciales, pero también puede especificar un conjunto de caracteres para eliminarlos pasando el argumento chars.

**Parámetros**
+ `input`: la cadena de entrada de la que se van a eliminar los espacios en blanco iniciales.
+ `chars`: (opcional) Para eliminar caracteres específicos.

## Ejemplo (MongoDB Shell)
<a name="ltrim-examples"></a>

El siguiente ejemplo demuestra el uso de `$ltrim` para eliminar caracteres específicos («\$1») del principio de una cadena.

**Cree documentos de muestra**

```
db.collection.insertMany([
  { name: " *John Doe", age: 30 },
  { name: "Jane Doe*", age: 25 },
  { name: "  Bob Smith  ", age: 35 }
]);
```

**Ejemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      _id: 0,
      name: {
        $ltrim: { input: "$name", chars: " *" }  
      },
      age: 1
    }
  }
]);
```

**Salida**

```
[
  { "name": "John Doe", "age": 30 },
  { "name": "Jane Doe ", "age": 25 },
  { "name": "Bob Smith  ", "age": 35 }
]
```

## Ejemplos de código
<a name="ltrim-code"></a>

Para ver un ejemplo de código para usar el `$ltrim` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

  try {
    await client.connect();

    const db = client.db('test');
    const collection = db.collection('collection');

    const pipeline = [
      {
        $project: {
          _id: 0,
          name: {
            $ltrim: {
              input: '$name',
              chars: ' *'
            }
          },
          age: 1
        }
      }
    ];

    const result = await collection.aggregate(pipeline).toArray();

    console.dir(result, { depth: null });

  } finally {
    await client.close();
  }
}

example().catch(console.error);
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    try:
        client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

        db = client.test
        collection = db.collection

        pipeline = [
            {
                "$project": {
                    "_id": 0,
                    "name": {
                        "$ltrim": {
                            "input": "$name",
                            "chars": " *"
                        }
                    },
                    "age": 1
                }
            }
        ]

        results = collection.aggregate(pipeline)

        for doc in results:
            print(doc)

    except Exception as e:
        print(f"An error occurred: {e}")
    
    finally:
        client.close()

example()
```

------

# \$1map
<a name="map"></a>

El `$map` operador de Amazon DocumentDB le permite aplicar una expresión específica a cada elemento de una matriz y devolver una nueva matriz con los elementos transformados. Este operador es especialmente útil para manipular y transformar los datos de las matrices, lo que puede ayudar a simplificar el código de la aplicación y mejorar el rendimiento de las consultas al llevar el procesamiento de las matrices al nivel de la base de datos.

**Parámetros**
+ `input`: La matriz que se va a transformar.
+ `as`: (opcional) El nombre de la variable que se utilizará en la expresión in para representar el elemento actual que se está procesando.
+ `in`: la expresión que se va a aplicar a cada elemento de la matriz de entrada.

## Ejemplo (MongoDB Shell)
<a name="map-examples"></a>

El siguiente ejemplo muestra cómo utilizar el operador \$1map para transformar una matriz de números, duplicando cada valor.

**Cree documentos de muestra**

```
db.collection.insertMany([
  { _id: 1, numbers: [1, 2, 3, 4, 5] },
  { _id: 2, numbers: [10, 20, 30, 40, 50] }
])
```

**Ejemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      doubledNumbers: { $map: { input: "$numbers", as: "num", in: { $multiply: ["$$num", 2] } } }
    }
  }
])
```

**Salida**

```
[
  { _id: 1, doubledNumbers: [2, 4, 6, 8, 10] },
  { _id: 2, doubledNumbers: [20, 40, 60, 80, 100] }
]
```

## Ejemplos de código
<a name="map-code"></a>

Para ver un ejemplo de código para usar el `$map` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('collection');

  const result = await collection.aggregate([
    {
      $project: {
        doubledNumbers: { $map: { input: "$numbers", as: "num", in: { $multiply: ["$$num", 2] } } }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.collection

    result = list(collection.aggregate([
        {
            '$project': {
                'doubledNumbers': { '$map': { 'input': '$numbers', 'as': 'num', 'in': { '$multiply': ['$$num', 2] } } }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1match
<a name="match"></a>

La etapa de `$match` canalización de Amazon DocumentDB se utiliza para filtrar los documentos de entrada y ver solo aquellos que coincidan con los criterios de consulta especificados. Es una de las etapas de canalización más utilizadas en las operaciones de agregación. La `$match` etapa se aplica antes que cualquier otra fase de la canalización, lo que permite reducir de manera eficiente la cantidad de documentos que deben procesarse en las etapas posteriores.

**Parámetros**
+ `query`: documento que expresa los criterios de selección de la operación. El documento de consulta utiliza la misma sintaxis que el `find()` método.

## Ejemplo (MongoDB Shell)
<a name="match-examples"></a>

El siguiente ejemplo demuestra el uso de la `$match` etapa para filtrar documentos en función de un valor de campo específico.

**Cree documentos de muestra**

```
db.collection.insertMany([
  { _id: 1, name: "John", age: 25, city: "New York" },
  { _id: 2, name: "Jane", age: 30, city: "Los Angeles" },
  { _id: 3, name: "Bob", age: 35, city: "Chicago" },
  { _id: 4, name: "Alice", age: 40, city: "Miami" }
]);
```

**Ejemplo de consulta**

```
db.collection.aggregate([
  { $match: { age: { $gt: 30 } } },
  { $project: { _id: 1, name: 1, city: 1 } }
]);
```

**Salida**

```
[
  { "_id": 3, "name": "Bob", "city": "Chicago" },
  { "_id": 4, "name": "Alice", "city": "Miami" }
]
```

La `$match` etapa filtra los documentos para incluir solo aquellos en los que el `age` campo es superior a 30.

## Ejemplos de código
<a name="match-code"></a>

Para ver un ejemplo de código para usar el `$match` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

  const db = client.db('test');
  const collection = db.collection('collection');

  const result = await collection.aggregate([
    { $match: { age: { $gt: 30 } } },
    { $project: { _id: 1, name: 1, city: 1 } }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    
    db = client['test']
    collection = db['collection']

    result = list(collection.aggregate([
        { '$match': { 'age': { '$gt': 30 } } },
        { '$project': { '_id': 1, 'name': 1, 'city': 1 } }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1max
<a name="max"></a>

La etapa de `$max` agregación se utiliza para devolver el valor máximo de un campo específico en todos los documentos de una etapa de canalización. Este operador es útil para encontrar el valor más alto en un conjunto de documentos.

**Parámetros**
+ `expression`: la expresión que se utilizará para calcular el valor máximo.

## Ejemplo (MongoDB Shell)
<a name="max-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$max` operador para encontrar la puntuación máxima en una colección de documentos de los estudiantes. La `$group` etapa agrupa todos los documentos y el `$max` operador se utiliza para calcular el valor máximo del `score` campo en todos los documentos.

**Cree documentos de muestra**

```
db.students.insertMany([
  { name: "John", score: 85 },
  { name: "Jane", score: 92 },
  { name: "Bob", score: 78 },
  { name: "Alice", score: 90 }
])
```

**Ejemplo de consulta**

```
db.students.aggregate([
  { $group: { _id: null, maxScore: { $max: "$score" } } },
  { $project: { _id: 0, maxScore: 1 } }
])
```

**Salida**

```
[ { maxScore: 92 } ]
```

## Ejemplos de código
<a name="max-code"></a>

Para ver un ejemplo de código para usar el `$max` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findMaxScore() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const students = db.collection('students');

  const result = await students.aggregate([
    { $group: { _id: null, maxScore: { $max: "$score" } } }
  ]).toArray();

  console.log(result);
  await client.close();
}

findMaxScore();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_max_score():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    students = db.students

    result = list(students.aggregate([
        { "$group": { "_id": None, "maxScore": { "$max": "$score" } } }
    ]))

    print(result)
    client.close()

find_max_score()
```

------

# \$1meta
<a name="meta-aggregation"></a>

El operador de `$meta` agregación accede a los metadatos asociados a los documentos de una canalización de agregación. Se suele utilizar para recuperar las puntuaciones de las búsquedas de texto y ordenar los resultados por relevancia.

**Parámetros**
+ `textScore`: recupera la puntuación de búsqueda de texto que indica la relevancia del documento para la consulta de búsqueda.

## Ejemplo (MongoDB Shell)
<a name="meta-aggregation-examples"></a>

El siguiente ejemplo demuestra el uso del `$meta` operador en una canalización de agregación para recuperar y ordenar las puntuaciones de búsqueda de texto.

**Cree documentos de muestra**

```
db.articles.createIndex({ content: "text" });

db.articles.insertMany([
  { _id: 1, title: "Python Programming", content: "Python is a versatile programming language used for web development." },
  { _id: 2, title: "Python Guide", content: "Learn Python programming with Python tutorials and Python examples." },
  { _id: 3, title: "Java Basics", content: "Java is another popular programming language." }
]);
```

**Ejemplo de consulta**

```
db.articles.aggregate([
  { $match: { $text: { $search: "Python" } } },
  { $addFields: { score: { $meta: "textScore" } } },
  { $sort: { score: -1 } }
]);
```

**Salida**

```
[
  {
    _id: 2,
    title: 'Python Guide',
    content: 'Learn Python programming with Python tutorials and Python examples.',
    score: 1.5
  },
  {
    _id: 1,
    title: 'Python Programming',
    content: 'Python is a versatile programming language used for web development.',
    score: 0.75
  }
]
```

## Ejemplos de código
<a name="meta-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$meta` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('articles');

  const result = await collection.aggregate([
    { $match: { $text: { $search: "Python" } } },
    { $addFields: { score: { $meta: "textScore" } } },
    { $sort: { score: -1 } }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['articles']

    result = list(collection.aggregate([
        { '$match': { '$text': { '$search': 'Python' } } },
        { '$addFields': { 'score': { '$meta': 'textScore' } } },
        { '$sort': { 'score': -1 } }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1merge
<a name="merge"></a>

Introducido en 8.0

La etapa de `$merge` agregación de Amazon DocumentDB se utiliza para combinar los resultados de la etapa de canalización anterior en una colección de destino. Esto resulta útil para actualizar o insertar documentos en una colección de destino en función de los datos de los documentos de entrada.

La `$merge` etapa permite realizar diversas acciones en función de la condición de coincidencia entre los documentos de entrada y la colección de destino, como:

```
- Insert new documents
- Update existing documents
- Delete documents
- Fail the operation if there are any conflicts
```

**Parámetros**
+ `into`: (obligatorio) El nombre de la colección de destino en la que se van a combinar los documentos de entrada.
+ `on`: (obligatorio) Los campos que se van a utilizar como condición de coincidencia entre los documentos de entrada y la colección de destino.
+ `whenMatched`: (opcional) La acción que se debe realizar cuando el documento de entrada coincide con un documento existente en la colección de destino. Los valores admitidos son: `"merge"`, `"replace"`, `"keepExisting"` y `"fail"`.
+ `whenNotMatched`: (opcional) La acción que se debe realizar cuando el documento de entrada no coincide con ningún documento de la colección de destino. Los valores admitidos son: `"insert"` y`"fail"`.

## Ejemplo (MongoDB Shell)
<a name="merge-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$merge` escenario para actualizar una `users` colección con nuevos datos de una canalización de entrada.

**Cree documentos de muestra**

```
db.users.insertMany([
  { _id: 1, name: "John Doe", email: "john@example.com" },
  { _id: 2, name: "Jane Smith", email: "jane@example.com" }
]);

db.inputData.insertMany([
  { _id: 1, name: "John Doe", email: "john@example.com", phone: "123-456-7890" },
  { _id: 3, name: "Bob Johnson", email: "bob@example.com", phone: "987-654-3210" }
]);
```

**Ejemplo de consulta**

```
db.inputData.aggregate([
  {
    $merge: {
      into: "users",
      on: "_id",
      whenMatched: "merge",
      whenNotMatched: "insert"
    }
  }
])
```

**Salida**

Tras ejecutar la `$merge` canalización, la `users` colección contendrá los siguientes documentos:

```
[
  { _id: 1, name: "John Doe", email: "john@example.com", phone: "123-456-7890" },
  { _id: 2, name: "Jane Smith", email: "jane@example.com" },
  { _id: 3, name: "Bob Johnson", email: "bob@example.com", phone: "987-654-3210" }
]
```

## Ejemplos de código
<a name="merge-code"></a>

Para ver un ejemplo de código para usar el `$merge` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

A continuación, se muestra un ejemplo del uso del operador \$1merge en una aplicación de Node.js:

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');

  await db.collection('inputData').aggregate([
    {
      $merge: {
        into: 'users',
        on: '_id',
        whenMatched: 'merge',
        whenNotMatched: 'insert'
      }
    }
  ]).toArray();

  const users = await db.collection('users').find({}).toArray();
  console.log(users);

  await client.close();
}

example();
```

------
#### [ Python ]

Este es un ejemplo del uso del operador \$1merge en una aplicación de Python:

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']

    # Assumes collections 'users' and 'inputData' already exist with sample data
    db.inputData.aggregate([
        {
            '$merge': {
                'into': 'users',
                'on': '_id',
                'whenMatched': 'merge',
                'whenNotMatched': 'insert'
            }
        }
    ])

    users = list(db.users.find({}))
    print(users)

    client.close()

example()
```

------

# \$1mergeObjects
<a name="mergeObjects"></a>

El `$mergeObjects` operador de Amazon DocumentDB se utiliza para combinar varios documentos u objetos en un único documento. Este operador resulta especialmente útil cuando se necesita combinar el contenido de dos o más documentos u objetos, lo que podría sobrescribir los valores de un objeto con los de otro.

**Parámetros**
+ `expression1`: el primer objeto que se va a fusionar.
+ `expression2`: (opcional) El segundo objeto que se va a fusionar.
+ `expression3`: (opcional) Objetos adicionales que se van a fusionar.

## Ejemplo (MongoDB Shell)
<a name="mergeObjects-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$mergeObjects` operador para combinar dos objetos.

**Cree documentos de muestra**

```
db.collection.insertMany([
  { "_id": 1, "name": "John", "address": { "city": "New York", "state": "NY" } },
  { "_id": 2, "name": "Jane", "address": { "city": "Los Angeles", "state": "CA" } }
]);
```

**Ejemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      "combinedAddress": {
        $mergeObjects: ["$address", { "country": "USA" }]
      }
    }
  }
])
```

**Salida**

```
[
  {
    "_id": 1,
    "combinedAddress": {
      "city": "New York",
      "state": "NY",
      "country": "USA"
    }
  },
  {
    "_id": 2,
    "combinedAddress": {
      "city": "Los Angeles",
      "state": "CA",
      "country": "USA"
    }
  }
]
```

## Ejemplos de código
<a name="mergeObjects-code"></a>

Para ver un ejemplo de código para usar el `$mergeObjects` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('collection');

  const result = await collection.aggregate([
    {
      $project: {
        "combinedAddress": {
          $mergeObjects: ["$address", { "country": "USA" }]
        }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['collection']

    result = list(collection.aggregate([
        {
            '$project': {
                "combinedAddress": {
                    "$mergeObjects": ["$address", { "country": "USA" }]
                }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1millisecond
<a name="millisecond"></a>

El `$millisecond` operador de Amazon DocumentDB se utiliza para extraer la parte de milisegundos de un valor de fecha.

**Parámetros**

Ninguno

## Ejemplo (MongoDB Shell)
<a name="millisecond-examples"></a>

En este ejemplo se muestra cómo utilizar el `$millisecond` operador para extraer la parte de milisegundos de un valor de fecha.

**Cree documentos de muestra**

```
db.events.insert([
  {
    "name": "Event 1",
    "timestamp": ISODate("2023-04-21T10:30:15.123Z")
  },
  {
    "name": "Event 2",
    "timestamp": ISODate("2023-04-21T10:30:15.456Z")
  },
  {
    "name": "Event 3",
    "timestamp": ISODate("2023-04-21T10:30:15.789Z")
  }
])
```

**Ejemplo de consulta**

```
db.events.aggregate([
  {
    $project: {
      name: 1,
      milliseconds: { $millisecond: "$timestamp" }
    }
  }
])
```

**Salida**

```
[
  {
    "_id": ObjectId("644332a42054ed1b0d15f0c1"),
    "name": "Event 1",
    "milliseconds": 123
  },
  {
    "_id": ObjectId("644332a42054ed1b0d15f0c2"),
    "name": "Event 2",
    "milliseconds": 456
  },
  {
    "_id": ObjectId("644332a42054ed1b0d15f0c3"),
    "name": "Event 3",
    "milliseconds": 789
  }
]
```

## Ejemplos de código
<a name="millisecond-code"></a>

Para ver un ejemplo de código para usar el `$millisecond` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const events = db.collection('events');

  const result = await events.aggregate([
    {
      $project: {
        name: 1,
        milliseconds: { $millisecond: '$timestamp' }
      }
    }
  ]).toArray();

  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
events = db['events']

result = list(events.aggregate([
    {
        '$project': {
            'name': 1,
            'milliseconds': { '$millisecond': '$timestamp' }
        }
    }
]))

print(result)

client.close()
```

------

# \$1min
<a name="min"></a>

El `$min` operador devuelve el valor mínimo de una matriz de valores. Se puede usar en las etapas de agregación para encontrar el valor mínimo de un campo específico en varios documentos.

**Parámetros**
+ `expression`: La expresión que se va a evaluar. Puede ser una ruta de campo, una variable o cualquier expresión que se resuelva en un valor.

## Ejemplo (MongoDB Shell)
<a name="min-examples"></a>

El siguiente ejemplo demuestra el uso del `$min` operador para encontrar el valor mínimo del `age` campo en varios documentos.

**Cree documentos de muestra**

```
db.users.insertMany([
  { name: "John", age: 35 },
  { name: "Jane", age: 28 },
  { name: "Bob", age: 42 },
  { name: "Alice", age: 31 }
]);
```

**Ejemplo de consulta**

```
db.users.aggregate([
  { $group: { _id: null, minAge: { $min: "$age" } } },
  { $project: { _id: 0, minAge: 1 } }
])
```

**Salida**

```
[ { minAge: 28 } ]
```

## Ejemplos de código
<a name="min-code"></a>

Para ver un ejemplo de código para usar el `$min` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findMinAge() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const users = db.collection('users');

  const result = await users.aggregate([
    { $group: {
        _id: null,
        minAge: { $min: "$age" }
      }}
  ]).toArray();

  console.log(result);
  client.close();
}

findMinAge();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_min_age():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    users = db.users

    result = list(users.aggregate([
        { "$group": {
            "_id": None,
            "minAge": { "$min": "$age" }
        }}
    ]))

    print(result)
    client.close()

find_min_age()
```

------

# \$1minute
<a name="minute"></a>

La etapa de canalización de `$minute` agregación de Amazon DocumentDB extrae el valor de los minutos de un campo de fecha o marca horaria.

Este operador resulta útil cuando necesita realizar cálculos o agrupaciones basados en fecha y hora dentro de su canalización de agregación.

**Parámetros**
+ `expression`: el campo de fecha o marca horaria del que se extrae el valor de los minutos.

## Ejemplo (MongoDB Shell)
<a name="minute-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$minute` operador para agrupar los documentos por el valor de minutos extraído del campo de marca de tiempo y contar el número de documentos de cada grupo.

**Cree documentos de muestra**

```
db.events.insertMany([
  { timestamp: new Date("2023-04-15T10:30:25.000Z") },
  { timestamp: new Date("2023-04-15T10:30:35.000Z") },
  { timestamp: new Date("2023-04-15T10:31:05.000Z") },
  { timestamp: new Date("2023-04-15T10:31:45.000Z") },
  { timestamp: new Date("2023-04-15T10:32:15.000Z") }
]);
```

**Ejemplo de consulta**

```
db.events.aggregate([
  {
    $group: {
      _id: {
        minute: { $minute: "$timestamp" }
      },
      count: { $count: {} }
    }
  },
  { $sort: { "_id.minute": 1 } }
]);
```

**Salida**

```
[
  { "_id": { "minute": 30 }, "count": 2 },
  { "_id": { "minute": 31 }, "count": 2 },
  { "_id": { "minute": 32 }, "count": 1 }
]
```

## Ejemplos de código
<a name="minute-code"></a>

Para ver un ejemplo de código para usar el `$minute` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('events');

  await collection.insertMany([
    { timestamp: new Date("2023-04-15T10:30:25.000Z") },
    { timestamp: new Date("2023-04-15T10:30:35.000Z") },
    { timestamp: new Date("2023-04-15T10:31:05.000Z") },
    { timestamp: new Date("2023-04-15T10:31:45.000Z") },
    { timestamp: new Date("2023-04-15T10:32:15.000Z") }
  ]);

  const result = await collection.aggregate([
    {
      $group: {
        _id: {
          minute: { $minute: "$timestamp" }
        },
        count: { $count: {} }
      }
    },
    { $sort: { "_id.minute": 1 } }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient
from datetime import datetime

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['events']

    collection.insert_many([
        {'timestamp': datetime(2023, 4, 15, 10, 30, 25)},
        {'timestamp': datetime(2023, 4, 15, 10, 30, 35)},
        {'timestamp': datetime(2023, 4, 15, 10, 31, 5)},
        {'timestamp': datetime(2023, 4, 15, 10, 31, 45)},
        {'timestamp': datetime(2023, 4, 15, 10, 32, 15)}
    ])

    result = list(collection.aggregate([
        {
            '$group': {
                '_id': {
                    'minute': {'$minute': '$timestamp'}
                },
                'count': {'$count': {}}
            }
        },
        {'$sort': {'_id.minute': 1}}
    ]))

    print(result)
    client.close()

example()
```

------

# \$1mod
<a name="mod"></a>

El `$mod` operador es un operador aritmético que realiza una operación de módulo en un número. Devuelve el resto de la división de un número por otro. Este operador se utiliza normalmente para determinar si un número es par o impar, o para distribuir elementos en un número finito de grupos.

**Parámetros**
+ `expression1`: La expresión del dividendo.
+ `expression2`: La expresión divisoria.

## Ejemplo (MongoDB Shell)
<a name="mod-examples"></a>

En este ejemplo se muestra cómo utilizar el `$mod` operador para determinar el número de widgets sobrantes cuando se envían paquetes de 100.

**Crea documentos de muestra**

```
db.widgets.insertMany([
  { "_id" : 1, "widget" : "A", "count" : 80372 },
  { "_id" : 2, "widget" : "B", "count" : 409282 },
  { "_id" : 3, "widget" : "C", "count" : 60739 }
])
```

**Ejemplo de consulta**

```
db.widgets.aggregate([
  { $addFields: { leftOver: { $mod: [ "$count", 100 ] } } }
])
```

**Salida**

```
[
  { "_id" : 1, "widget" : "A", "count" : 80372, "leftOver" : 72 },
  { "_id" : 2, "widget" : "B", "count" : 409282, "leftOver" : 82 },
  { "_id" : 3, "widget" : "C", "count" : 60739, "leftOver" : 39 }
]
```

El resultado muestra el resto `count` dividido por 100 para cada documento, lo que representa el número de widgets sobrantes al enviarse en paquetes de 100.

## Ejemplos de código
<a name="mod-code"></a>

Para ver un ejemplo de código para usar el `$mod` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const widgets = db.collection('widgets');

  await widgets.insertMany([
    { "_id" : 1, "widget" : "A", "count" : 80372 },
    { "_id" : 2, "widget" : "B", "count" : 409282 },
    { "_id" : 3, "widget" : "C", "count" : 60739 }
  ]);

  const result = await widgets.aggregate([
    { $addFields: { leftOver: { $mod: [ "$count", 100 ] } } }
  ]).toArray();

  console.log(result);
  client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
widgets = db['widgets']

widgets.insert_many([
    { "_id" : 1, "widget" : "A", "count" : 80372 },
    { "_id" : 2, "widget" : "B", "count" : 409282 },
    { "_id" : 3, "widget" : "C", "count" : 60739 }
])

result = list(widgets.aggregate([
    { "$addFields": { "leftOver": { "$mod": [ "$count", 100 ] } } }
]))

print(result)
client.close()
```

------

# \$1month
<a name="month"></a>

El `$month` operador de Amazon DocumentDB devuelve el mes de una fecha como un número entre 1 y 12. Este operador resulta útil para extraer el componente mensual de un campo de fecha y realizar agregaciones y análisis basados en fechas.

**Parámetros**
+ `date_expression`: Esta es la expresión o el campo que contiene la fecha o la marca de tiempo de la que desea extraer el mes.

## Ejemplo (MongoDB Shell)
<a name="month-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$month` operador para extraer el mes de un campo de fecha y agrupar los datos por mes.

**Cree documentos de muestra**

```
db.sales.insert([
  { product: "abc123", price: 10.99, date: new Date("2022-01-15") },
  { product: "def456", price: 15.50, date: new Date("2022-02-28") },
  { product: "ghi789", price: 8.25, date: new Date("2022-03-10") },
  { product: "jkl012", price: 12.75, date: new Date("2022-04-05") },
  { product: "mno345", price: 18.99, date: new Date("2022-05-20") }
]);
```

**Ejemplo de consulta**

```
db.sales.aggregate([
  { $group: { 
      _id: { month: { $month: "$date" } },
      totalSales: { $sum: "$price" }
    }},
  { $sort: { "_id.month": 1 } }
]);
```

**Salida**

```
[
  { _id: { month: 1 }, totalSales: 10.99 },
  { _id: { month: 2 }, totalSales: 15.5 },
  { _id: { month: 3 }, totalSales: 8.25 },
  { _id: { month: 4 }, totalSales: 12.75 },
  { _id: { month: 5 }, totalSales: 18.99 }
]
```

## Ejemplos de código
<a name="month-code"></a>

Para ver un ejemplo de código para usar el `$month` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function groupSalesByMonth() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

  try {
    await client.connect();
    const db = client.db('test');
    const collection = db.collection('sales');

    const pipeline = [
      {
        $group: {
          _id: { month: { $month: "$date" } },
          totalSales: { $sum: "$price" }
        }
      },
      {
        $sort: { "_id.month": 1 }
      }
    ];

    const results = await collection.aggregate(pipeline).toArray();

    console.dir(results, { depth: null });

  } finally {
    await client.close();
  }
}

groupSalesByMonth().catch(console.error);
```

------
#### [ Python ]

```
from pymongo import MongoClient

def group_sales_by_month():
  
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

    try:
        db = client.test
        collection = db.sales

        pipeline = [
            {
                "$group": {
                    "_id": { "$month": "$date" }, 
                    "totalSales": { "$sum": "$price" }  
                }
            },
            {
                "$sort": { "_id": 1 } 
            }
        ]

        results = collection.aggregate(pipeline)

        for doc in results:
            print(doc)

    except Exception as e:
        print(f"An error occurred: {e}")

    finally:
        client.close()

group_sales_by_month()
```

------

# \$1multiply
<a name="multiply"></a>

El `$multiply` operador de Amazon DocumentDB se utiliza para multiplicar los valores de dos o más campos o expresiones. Este operador es particularmente útil para realizar operaciones aritméticas en campos numéricos de documentos. Se puede emplear en varias etapas del proceso de agregación, como `$project` y`$addFields`, para crear nuevos campos o modificar los existentes.

**Parámetros**
+ `expression1`: la primera expresión numérica que se va a multiplicar.
+ `expression2`: la segunda expresión numérica que se va a multiplicar.
+ `[expression3, ...]`: (opcional) Expresiones numéricas adicionales que se van a multiplicar.

## Ejemplo (MongoDB Shell)
<a name="multiply-examples"></a>

En el siguiente ejemplo, se muestra `$multiply` cómo calcular `bonus_miles` multiplicando `base_miles` y `bonus_rate` para los clientes que utilizaron una tarjeta de crédito para el viaje.

**Ejemplos de documentos**

```
db.miles.insertMany([
{ "_id": 1, "customer_name": "Arnav Desai", "member_since": ISODate("1997-03-01T00:00:00Z"), "base_miles": 2500, "bonus_rate": 1.8, "credit_card": true, "trip_cost": 250 },
{ "_id": 2, "customer_name": "Jorge Souza", "member_since": ISODate("2004-01-10T00:00:00Z"), "base_miles": 1890, "bonus_rate": 1.4, "credit_card": true, "trip_cost": 189 },
{ "_id": 3, "customer_name": "Saanvi Sarkar", "member_since": ISODate("1999-11-22T00:00:00Z"), "base_miles": 3250, "bonus_rate": 1.8, "credit_card": false, "trip_cost": 325 },
{ "_id": 4, "customer_name": "Paulo Santos", "member_since": ISODate("2021-06-19T00:00:00Z"), "base_miles": 2980, "bonus_rate": 1.2, "credit_card": true, "trip_cost": 298 },
{ "_id": 5, "customer_name": "Wang Xiulan", "member_since": ISODate("1995-12-04T00:00:00Z"), "base_miles": 1350, "bonus_rate": 1.9, "credit_card": false, "trip_cost": 135 }
]);
```

**Ejemplo de consulta**

```
db.miles.aggregate([
  {
    $match: { credit_card: true }
  },
  {
    $project: {
      customer_name: 1,
      base_miles: 1,
      bonus_rate:1,
      credit_card: 1,
      total_miles: {
        $multiply: ["$base_miles", "$bonus_rate"]
      }
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, customer_name: 'Arnav Desai', base_miles: 12500, bonus_rate: 1.8, credit_card: true, total_miles: 22500 },
  { _id: 3, customer_name: 'Saanvi Sarkar',base_miles: 15200, bonus_rate: 1.8, credit_card: true, total_miles: 27360 },
  { _id: 4, customer_name: 'Paulo Santos', base_miles: 3400, bonus_rate: 1.1, credit_card: true, total_miles: 3740 }
]
```

## Ejemplos de código
<a name="multiply-code"></a>

Para ver un ejemplo de código para usar el `$multiply` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function multiplyBonusMiles() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('miles');

  const result = await collection.aggregate([
    { $match: { credit_card: true } },
    {
      $project: {
        customer_name: 1,
        base_miles: 1,
        bonus_rate: 1,
        credit_card: 1,
        total_miles: {
          $multiply: ["$base_miles", "$bonus_rate"]
        }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

multiplyBonusMiles();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def multiply_bonus_miles():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['miles']

    result = list(collection.aggregate([
        {'$match': {'credit_card': True}},
        {
            '$project': {
                'customer_name': 1,
                'base_miles': 1,
                'bonus_rate': 1,
                'credit_card': 1,
                'total_miles': {
                    '$multiply': ['$base_miles', '$bonus_rate']
                }
            }
        }
    ]))

    print(result)
    client.close()

multiply_bonus_miles()
```

------

# \$1natural
<a name="natural"></a>

El `$natural` operador de Amazon DocumentDB se utiliza para ordenar los documentos en su orden natural, que es el orden en el que se insertaron en la colección. Esto contrasta con el comportamiento de ordenación predeterminado, que consiste en ordenar los documentos en función de los valores de los campos especificados.

**Parámetros**

Ninguno

## Ejemplo (MongoDB Shell)
<a name="natural-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$natural` operador para ordenar los documentos de una colección en su orden natural.

**Cree documentos de muestra**

```
db.people.insertMany([
  { "_id": 1, "name": "María García", "age": 28 },
  { "_id": 2, "name": "Arnav Desai", "age": 32 },
  { "_id": 3, "name": "Li Juan", "age": 25 },
  { "_id": 4, "name": "Carlos Salazar", "age": 41 },
  { "_id": 5, "name": "Sofia Martínez", "age": 35 }
]);
```

**Ejemplo de consulta**

```
db.people.find({}, { "_id": 1, "name": 1 }).sort({ "$natural": 1 });
```

**Salida**

```
[
  { "_id": 1, "name": "María García" },
  { "_id": 2, "name": "Arnav Desai" },
  { "_id": 3, "name": "Li Juan" },
  { "_id": 4, "name": "Carlos Salazar" },
  { "_id": 5, "name": "Sofia Martínez" }
]
```

La consulta ordena los documentos de la colección en su orden natural, que es el orden en el que se insertaron.

## Ejemplos de código
<a name="natural-code"></a>

Para ver un ejemplo de código para usar el `$natural` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('people');

  const documents = await collection.find({}, { projection: { _id: 1, name: 1 } })
    .sort({ $natural: 1 })
    .toArray();

  console.log(documents);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['people']

    documents = list(collection.find({}, {'_id': 1, 'name': 1}).sort('$natural', 1))
    print(documents)

    client.close()

example()
```

------

# \$1ne
<a name="ne-aggregation"></a>

El operador de `$ne` agregación compara dos valores y devuelve `true` si no son iguales; de lo contrario, devuelve`false`.

**Parámetros**
+ `expression1`: El primer valor que se va a comparar.
+ `expression2`: El segundo valor que se va a comparar.

## Ejemplo (MongoDB Shell)
<a name="ne-aggregation-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$ne` operador para identificar los pedidos con cambios de estado.

**Cree documentos de muestra**

```
db.orders.insertMany([
  { _id: 1, orderId: "A123", status: "shipped", expectedStatus: "shipped" },
  { _id: 2, orderId: "B456", status: "pending", expectedStatus: "shipped" },
  { _id: 3, orderId: "C789", status: "delivered", expectedStatus: "delivered" }
]);
```

**Ejemplo de consulta**

```
db.orders.aggregate([
  {
    $project: {
      orderId: 1,
      status: 1,
      expectedStatus: 1,
      needsAttention: { $ne: ["$status", "$expectedStatus"] }
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, orderId: 'A123', status: 'shipped', expectedStatus: 'shipped', needsAttention: false },
  { _id: 2, orderId: 'B456', status: 'pending', expectedStatus: 'shipped', needsAttention: true },
  { _id: 3, orderId: 'C789', status: 'delivered', expectedStatus: 'delivered', needsAttention: false }
]
```

## Ejemplos de código
<a name="ne-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$ne` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('orders');

  const result = await collection.aggregate([
    {
      $project: {
        orderId: 1,
        status: 1,
        expectedStatus: 1,
        needsAttention: { $ne: ["$status", "$expectedStatus"] }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['orders']

    result = list(collection.aggregate([
        {
            '$project': {
                'orderId': 1,
                'status': 1,
                'expectedStatus': 1,
                'needsAttention': { '$ne': ['$status', '$expectedStatus'] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1not
<a name="not-aggregation"></a>

El operador de `$not` agregación realiza una operación NOT lógica en una expresión. Devuelve `true` si la expresión se evalúa como y `false` si la expresión se evalúa como. `false` `true`

**Parámetros**
+ `expression`: La expresión que se va a negar.

## Ejemplo (MongoDB Shell)
<a name="not-aggregation-examples"></a>

El siguiente ejemplo demuestra el uso del `$not` operador para invertir valores booleanos.

**Cree documentos de muestra**

```
db.users.insertMany([
  { _id: 1, name: "Alice", active: true },
  { _id: 2, name: "Bob", active: false },
  { _id: 3, name: "Charlie", active: true }
]);
```

**Ejemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      active: 1,
      inactive: { $not: ["$active"] }
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, name: 'Alice', active: true, inactive: false },
  { _id: 2, name: 'Bob', active: false, inactive: true },
  { _id: 3, name: 'Charlie', active: true, inactive: false }
]
```

## Ejemplos de código
<a name="not-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$not` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('users');

  const result = await collection.aggregate([
    {
      $project: {
        name: 1,
        active: 1,
        inactive: { $not: ["$active"] }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['users']

    result = list(collection.aggregate([
        {
            '$project': {
                'name': 1,
                'active': 1,
                'inactive': { '$not': ['$active'] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1objectToArray
<a name="objectToArray"></a>

El operador de `$objectToArray` agregación de Amazon DocumentDB convierte un objeto (o documento) en una matriz. La entrada del operador es un documento y la salida consiste en un elemento de matriz para cada par campo-valor del documento de entrada. Este operador resulta útil cuando se necesita trabajar con los campos individuales de un documento como una matriz, por ejemplo, cuando se busca el documento con el valor máximo o mínimo de un campo concreto.

**Parámetros**
+ `expression`: la expresión del documento que se va a convertir en una matriz.

## Ejemplo (MongoDB Shell)
<a name="objectToArray-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$objectToArray` operador para buscar el documento con el inventario máximo para una cadena de tiendas de alquiler de vídeos.

**Cree documentos de muestra**

```
db.videos.insertMany([
  {
    "_id": 1,
    "name": "Live Soft",
    "inventory": {
      "Des Moines": 1000,
      "Ames": 500
    }
  },
  {
    "_id": 2,
    "name": "Top Pilot",
    "inventory": {
      "Mason City": 250,
      "Des Moines": 1000
    }
  },
  {
    "_id": 3,
    "name": "Romancing the Rock",
    "inventory": {
      "Mason City": 250,
      "Ames": 500
    }
  },
  {
    "_id": 4,
    "name": "Bravemind",
    "inventory": {
      "Mason City": 250,
      "Des Moines": 1000,
      "Ames": 500
    }
  }
]);
```

**Ejemplo de consulta**

```
db.videos.aggregate([
  {
    $project: {
      name: 1,
      videos: {
        $objectToArray: "$inventory"
      }
    }
  },
  {
    $unwind: "$videos"
  },
  {
    $group: {
      _id: "$name",
      maxInventory: {
        $max: "$videos.v"
      }
    }
  }
]);
```

**Salida**

```
[
  {
    "_id": "Bravemind",
    "maxInventory": 1000
  },
  {
    "_id": "Live Soft",
    "maxInventory": 1000
  },
  {
    "_id": "Romancing the Rock",
    "maxInventory": 500
  },
  {
    "_id": "Top Pilot",
    "maxInventory": 1000
  }
]
```

## Ejemplos de código
<a name="objectToArray-code"></a>

Para ver un ejemplo de código para usar el `$objectToArray` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findMaxInventory() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const videos = db.collection('videos');

  const result = await videos.aggregate([
    {
      $project: {
        name: 1,
        videos: {
          $objectToArray: "$inventory"
        }
      }
    },
    {
      $unwind: "$videos"
    },
    {
      $group: {
        _id: "$name",
        maxInventory: {
          $max: "$videos.v"
        }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

findMaxInventory();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_max_inventory():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    videos = db['videos']

    result = list(videos.aggregate([
        {
            '$project': {
                'name': 1,
                'videos': {
                    '$objectToArray': '$inventory'
                }
            }
        },
        {
            '$unwind': '$videos'
        },
        {
            '$group': {
                '_id': '$name',
                'maxInventory': {
                    '$max': '$videos.v'
                }
            }
        }
    ]))

    print(result)
    client.close()

find_max_inventory()
```

------

# \$1or
<a name="or-aggregation"></a>

El operador de `$or` agregación evalúa varias expresiones y devuelve `true` si al menos una expresión se evalúa como. `true` `false`Solo se devuelve si todas las expresiones lo son. `false`

**Parámetros**
+ `expressions`: Un conjunto de expresiones para evaluar.

## Ejemplo (MongoDB Shell)
<a name="or-aggregation-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$or` operador para comprobar si los productos cumplen alguno de los diversos criterios.

**Cree documentos de muestra**

```
db.items.insertMany([
  { _id: 1, name: "Widget", price: 150, onSale: false },
  { _id: 2, name: "Gadget", price: 45, onSale: false },
  { _id: 3, name: "Tool", price: 200, onSale: true }
]);
```

**Ejemplo de consulta**

```
db.items.aggregate([
  {
    $project: {
      name: 1,
      price: 1,
      onSale: 1,
      goodDeal: {
        $or: [
          { $lt: ["$price", 50] },
          { $eq: ["$onSale", true] }
        ]
      }
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, name: 'Widget', price: 150, onSale: false, goodDeal: false },
  { _id: 2, name: 'Gadget', price: 45, onSale: false, goodDeal: true },
  { _id: 3, name: 'Tool', price: 200, onSale: true, goodDeal: true }
]
```

## Ejemplos de código
<a name="or-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$or` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('items');

  const result = await collection.aggregate([
    {
      $project: {
        name: 1,
        price: 1,
        onSale: 1,
        goodDeal: {
          $or: [
            { $lt: ["$price", 50] },
            { $eq: ["$onSale", true] }
          ]
        }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['items']

    result = list(collection.aggregate([
        {
            '$project': {
                'name': 1,
                'price': 1,
                'onSale': 1,
                'goodDeal': {
                    '$or': [
                        { '$lt': ['$price', 50] },
                        { '$eq': ['$onSale', True] }
                    ]
                }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1out
<a name="out"></a>

El `$out` operador de Amazon DocumentDB se utiliza para escribir el resultado de una canalización de agregación en una colección específica.

`$out`debería ser la última etapa de la canalización.

**Parámetros**
+ `output_collection`: el nombre de la colección de salida en la que se escribirán los resultados de la agregación.

**Nota**: Si la colección ya existe, se sustituirá por los resultados de la etapa de agregación.

## Ejemplo (MongoDB Shell)
<a name="out-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$out` operador de Amazon DocumentDB para escribir los resultados de una canalización de agregación en una nueva colección.

**Cree documentos de muestra**

```
db.products.insertMany([
  { _id: 1, name: "Wireless Headphones", category: "Electronics", price: 100.0 },
  { _id: 2, name: "Smartphone", category: "Electronics", price: 200.0 },
  { _id: 3, name: "JavaScript Guide", category: "Books", price: 50.0 },
  { _id: 4, name: "Database Design Handbook", category: "Books", price: 75.0 }
]);
```

**Ejemplo de consulta**

```
db.products.aggregate([
  { $group: { _id: "$category", totalPrice: { $sum: "$price" } } },
  { $out: "product_categories" }
])
```

**Salida**

Ninguno (los resultados se escriben en la colección de resultados).

El proceso de agregación agrupa los productos por categoría y calcula el precio total de los artículos de cada categoría. El `$out` operador escribe los resultados en una nueva colección denominada «product\$1categories».

**Para ver los resultados en la colección de salida:**

```
db.product_categories.find()
[
{ "_id" : "Books", "totalPrice" : 125 },
{ "_id" : "Electronics", "totalPrice" : 300 }
]
```

## Ejemplos de código
<a name="out-code"></a>

Para ver un ejemplo de código para usar el `$out` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function demo_out_operator() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const products = db.collection('products');

  // Execute aggregation with $out - results are stored in 'product_categories' collection
  await products.aggregate([
    { $group: { _id: "$category", totalPrice: { $sum: "$price" } } },
    { $out: "product_categories" }
  ]).toArray();

  // Retrieve the results from the output collection (limited to 20 records)
  const productCategories = db.collection('product_categories');
  const results = await productCategories.find({}).limit(20).toArray();
  
  console.log('Results stored in product_categories collection:', results);
  await client.close();
}

demo_out_operator();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def demo_out_operator():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    products = db['products']

    # Execute aggregation with $out - results are stored in 'product_categories' collection
    list(products.aggregate([
        { '$group': { '_id': '$category', 'totalPrice': { '$sum': '$price' } } },
        { '$out': 'product_categories' }
    ]))

    # Retrieve the results from the output collection (limited to 20 records)
    product_categories = db['product_categories']
    results = list(product_categories.find({}).limit(20))
    
    print('Results stored in product_categories collection:', results)
    client.close()

demo_out_operator()
```

------

# \$1pow
<a name="pow"></a>

Introducido en 8.0

El `$pow` operador de Amazon DocumentDB le permite elevar un número a una potencia. Esto puede resultar útil para realizar cálculos exponenciales dentro de su canalización de agregación.

**Parámetros**
+ `<number>`(obligatorio): el número que se va a elevar a una potencia.
+ `<exponent>`(obligatorio): la potencia a la que debe elevarse el número.

## Ejemplo (MongoDB Shell)
<a name="pow-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$pow` operador para calcular el cuadrado de un número.

**Cree documentos de muestra**

```
db.numbers.insertMany([
  { "_id": 1, "value": 2 },
  { "_id": 2, "value": 3 },
  { "_id": 3, "value": 4 }
]);
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  { $addFields: { "square": { $pow: ["$value", 2] } } }
])
```

**Salida**

```
[
  { "_id": 1, "value": 2, "square": 4 },
  { "_id": 2, "value": 3, "square": 9 },
  { "_id": 3, "value": 4, "square": 16 }
]
```

## Ejemplos de código
<a name="pow-code"></a>

Para ver un ejemplo de código para usar el `$pow` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

A continuación, se muestra un ejemplo del uso del operador \$1pow en una aplicación de Node.js:

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('numbers');

  const result = await collection.aggregate([
    { $addFields: { "square": { $pow: ["$value", 2] } } }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

Este es un ejemplo del uso del operador \$1pow en una aplicación de Python:

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['numbers']

    result = list(collection.aggregate([
        { "$addFields": { "square": { "$pow": ["$value", 2] } } }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1push
<a name="push-aggregation"></a>

El operador de `$push` agregación devuelve una matriz de todos los valores de una expresión especificada para cada grupo. Por lo general, se usa dentro de la `$group` etapa para acumular valores en una matriz.

**Parámetros**
+ `expression`: la expresión que se va a evaluar para cada documento del grupo.

## Ejemplo (MongoDB Shell)
<a name="push-aggregation-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$push` operador para recopilar todos los nombres de productos de cada categoría.

**Cree documentos de muestra**

```
db.sales.insertMany([
  { _id: 1, category: "Electronics", product: "Laptop", amount: 1200 },
  { _id: 2, category: "Electronics", product: "Mouse", amount: 25 },
  { _id: 3, category: "Furniture", product: "Desk", amount: 350 },
  { _id: 4, category: "Furniture", product: "Chair", amount: 150 },
  { _id: 5, category: "Electronics", product: "Keyboard", amount: 75 }
]);
```

**Ejemplo de consulta**

```
db.sales.aggregate([
  {
    $group: {
      _id: "$category",
      products: { $push: "$product" }
    }
  }
]);
```

**Salida**

```
[
  { _id: 'Furniture', products: [ 'Desk', 'Chair' ] },
  { _id: 'Electronics', products: [ 'Laptop', 'Mouse', 'Keyboard' ] }
]
```

## Ejemplos de código
<a name="push-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$push` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('sales');

  const result = await collection.aggregate([
    {
      $group: {
        _id: "$category",
        products: { $push: "$product" }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['sales']

    result = list(collection.aggregate([
        {
            '$group': {
                '_id': '$category',
                'products': { '$push': '$product' }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1project
<a name="project"></a>

El `$project` operador de Amazon DocumentDB le permite incluir o excluir campos de los documentos de salida de forma selectiva, pasar valores a la siguiente fase del proceso de procesamiento y calcular nuevos campos a partir de los valores de los documentos de entrada.

**Parámetros**
+ `field`: El campo que se debe incluir o excluir de los documentos de salida, puede ser una ruta de campo (p. ej., «a.b.c»).
+ `1`o`true`: incluye el campo en la salida.
+ `0`o`false`: excluye el campo de la salida.

## Ejemplo (MongoDB Shell)
<a name="project-examples"></a>

El siguiente ejemplo demuestra el uso del `$project` operador en la colección de estudiantes

**Cree documentos de muestra**

```
db.students.insertMany([
  { "_id": 1, "name": "Alejandro Rosalez", "math": 85, "science": 92, "grade": "A" },
  { "_id": 2, "name": "Carlos Salazar", "math": 78, "science": 84, "grade": "B" },
  { "_id": 3, "name": "Nikhil Jayashankar", "math": 95, "science": 89, "grade": "A" },
  { "_id": 4, "name": "Shirley Rodriguez", "math": 72, "science": 76, "grade": "B" }
  ]);
```

Esta consulta incluye solo los `math` campos `name` y de la salida. El `_id` campo se incluye de forma predeterminada a menos que se excluya explícitamente.

```
db.students.aggregate([
  { $project: { "name": 1, "math": 1 } }
])
```

**Salida**

```
{ _id: 1, name: "Alejandro Rosalez", math: 85 }
{ _id: 2, name: "Carlos Salazar", math: 78 }
{ _id: 3, name: "Nikhil Jayashankar", math: 95 }
{ _id: 4, name: "Shirley Rodriguez", math: 72 }
```

Esta consulta excluye los `_id` campos `grade` y de la salida y muestra todos los demás campos (`name`,`math`,`science`).

```
db.students.aggregate([
  { $project: { "grade": 0, "_id": 0 } }
])
```

**Salida**

```
{ name: "Alejandro Rosalez", math: 85, science: 92 }
{ name: "Carlos Salazar", math: 78, science: 84 }
{ name: "Nikhil Jayashankar", math: 95, science: 89 }
{ name: "Shirley Rodriguez", math: 72, science: 76 }
```

## Ejemplos de código
<a name="project-code"></a>

Para ver un ejemplo de código para usar el `$project` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('students');

  const result = await collection.aggregate([
    { $project: { "name": 1, "math": 1 } }
  ]).toArray();
  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['students']

    result = list(collection.aggregate([
        { '$project': { 'name': 1, 'math': 1 } }
    ]))
    print(result)

    client.close()

example()
```

------

# \$1rand
<a name="rand"></a>

Novedades de la versión 8.0

El `$rand` operador de Amazon DocumentDB se utiliza para generar un número aleatorio entre 0 y 1.

**Parámetros**

Ninguno

## Ejemplo (MongoDB Shell)
<a name="rand-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$rand` operador para seleccionar aleatoriamente dos documentos de la `temp` colección.

**Cree documentos de muestra**

```
db.items.insertMany([
  { "name": "pencil", "quantity": 110 },
  { "name": "pen", "quantity": 159 }
])
```

**Ejemplo de consulta**

```
db.items.aggregate([
  {
    $project: {
      randomValue: { $rand: {} }
    }
  }
])
```

**Salida**

```
[
  {
    _id: ObjectId('6924a5edd66dcae121d29517'),
    randomValue: 0.8615243955294392
  },
  {
    _id: ObjectId('6924a5edd66dcae121d29518'),
    randomValue: 0.22815483022099903
  }
]
```

## Ejemplos de código
<a name="rand-code"></a>

Para ver un ejemplo de código para usar el `$rand` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('items');

  const result = await collection.aggregate([
    {
      $project: {
        randomValue: { $rand: {} }
      }
    }
  ]).toArray();

  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
  client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
  db = client['test']
  collection = db['items']

  result = list(collection.aggregate([
      {
        "$project": {
          "randomValue": { "$rand": {} }
        }
      }
  ]))

  print(result)

  client.close()

example()
```

------

# \$1range
<a name="range"></a>

El operador de `$range` agregación de Amazon DocumentDB se utiliza para crear una matriz de números consecutivos dentro de un rango específico. Este operador es particularmente útil para generar secuencias de números, como marcadores de millas para los avituallamientos en una carrera, como se muestra en los ejemplos siguientes.

**Parámetros**
+ `start`: el valor inicial del rango.
+ `end`: el valor final del rango.
+ `step`: (opcional) El valor del paso que se utilizará al generar el rango. Si no se proporciona, el valor de paso predeterminado es 1.

## Ejemplo (MongoDB Shell)
<a name="range-examples"></a>

En este ejemplo, utilizaremos el `$range` operador para generar los marcadores de millas de las estaciones de abastecimiento de agua en una carrera de bicicletas.

**Crea documentos de muestra**

```
db.races.insertMany([
  { _id: 0, race: "STP", distance: 206 },
  { _id: 1, race: "RSVP", distance: 160 },
  { _id: 2, race: "Chilly Hilly", distance: 33 },
  { _id: 3, race: "Flying Wheels", distance: 100 }
]);
```

**Ejemplo de consulta**

```
db.races.aggregate([
  {
    $project: {
      race: 1,
      "waterStations": { $range: [20, "$distance", 20] }
    }
  }
]);
```

**Salida**

```
[
  {
    _id: 0,
    race: 'STP',
    waterStations: [
       20,  40,  60,  80,
      100, 120, 140, 160,
      180, 200
    ]
  },
  {
    _id: 1,
    race: 'RSVP',
    waterStations: [
       20,  40,  60, 80,
      100, 120, 140
    ]
  },
  { _id: 2, race: 'Chilly Hilly', waterStations: [ 20 ] },
  { _id: 3, race: 'Flying Wheels', waterStations: [ 20, 40, 60, 80 ] }
]
```

## Ejemplos de código
<a name="range-code"></a>

Para ver un ejemplo de código para usar el `$range` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

  try {
    await client.connect();
    const db = client.db('test');
    const collection = db.collection('races');

    const pipeline = [
      {
        $project: {
          race: 1,
          waterStations: { $range: [20, "$distance", 20] } 
        }
      }
    ];

    const results = await collection.aggregate(pipeline).toArray();

    console.dir(results, { depth: null });

  } finally {
    await client.close();
  }
}

example().catch(console.error);
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():

  client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

  try:
      db = client.test
      collection = db.races

      pipeline = [
          {
              "$project": {
                  "race": 1,
                  "waterStations": { "$range": [20, "$distance", 20] }
              }
          }
      ]

      results = collection.aggregate(pipeline)

      for doc in results:
          print(doc)

  except Exception as e:
      print(f"An error occurred: {e}")

  finally:
      client.close()

example()
```

------

# \$1redact
<a name="redact"></a>

La etapa de `$redact` agregación de Amazon DocumentDB se utiliza para incluir o excluir contenido de los documentos de salida de forma selectiva en función de los valores de los campos especificados. Esto resulta especialmente útil en situaciones en las que necesita controlar la visibilidad de los datos confidenciales en función de los niveles de acceso o los permisos de los usuarios.

**Parámetros**
+ `$cond`: una expresión que da como resultado uno de los campos del documento o `$$DESCEND` para cada uno de ellos. `$$KEEP` `$$PRUNE`
+ `$$KEEP`: conserva el campo actual del documento de salida.
+ `$$PRUNE`: elimina el campo actual del documento de salida.
+ `$$DESCEND`: aplica el `$redact` escenario de forma recursiva al campo actual, que es un objeto o una matriz.

## Ejemplo (MongoDB Shell)
<a name="redact-examples"></a>

En este ejemplo, utilizaremos la `$redact` etapa para filtrar los pedidos en función de su estado y mostrar solo los pedidos con valores de estado específicos.

**Crea documentos de muestra**

```
db.orders.insert([
  { "_id": 1, "status": "shipped", "customer": "Carlos Salazar", "total": 150.00, "date": "2025-01-15" },
  { "_id": 2, "status": "processing", "customer": "Saanvi Sarkar", "total": 89.99, "date": "2025-01-20" },
  { "_id": 3, "status": "cancelled", "customer": "Zhang Wei", "total": 220.50, "date": "2025-01-18" }
])
```

**Ejemplo de consulta**

```
db.orders.aggregate([
  {
    $redact: {
      $cond: {
        if: { $in: ["$status", ["shipped", "processing"]] },
        then: "$$KEEP",
        else: "$$PRUNE"
      }
    }
  }
])
```

**Salida**

```
[
  { _id: 1, status: 'shipped', customer: 'Carlos Salazar', total: 150, date: '2025-01-15' },
  { _id: 2, status: 'processing', customer: 'Saanvi Sarkar', total: 89.99, date: '2025-01-20' }
]
```

En este ejemplo, la `$redact` etapa comprueba el valor del `status` campo en cada documento. Si `status` está «enviado» o «procesado», el documento se conserva (`$$KEEP`). De lo contrario, el documento se borra (`$$PRUNE`).

## Ejemplos de código
<a name="redact-code"></a>

Para ver un ejemplo de código para usar el `$redact` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('orders');

  const result = await collection.aggregate([
    {
      $redact: {
        $cond: {
          if: { $in: ['$status', ['shipped', 'processing']] },
          then: '$$KEEP',
          else: '$$PRUNE'
        }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['orders']

    result = list(collection.aggregate([
        {
            '$redact': {
                '$cond': {
                    'if': { '$in': ['$status', ['shipped', 'processing']] },
                    'then': '$$KEEP',
                    'else': '$$PRUNE'
                }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1reduce
<a name="reduce"></a>

El operador de `$reduce` agregación de Amazon DocumentDB se utiliza para aplicar una función de dos argumentos de forma acumulativa a los elementos de una matriz con el fin de reducir la matriz a un único valor. Este operador es particularmente útil para realizar cálculos o transformaciones complejos en los datos de una matriz dentro del proceso de agregación.

**Parámetros**
+ `input`: La matriz que se va a reducir.
+ `initialValue`: El valor inicial que se utilizará en la operación de reducción.
+ `in`: la expresión que se va a evaluar en cada elemento de la `input` matriz. Esta expresión debe devolver un valor que se utilizará en la siguiente iteración de la reducción.

## Ejemplo (MongoDB Shell)
<a name="reduce-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$reduce` operador para calcular la suma de todos los elementos de una matriz.

**Cree documentos de muestra**

```
db.orders.insertMany([
  { "_id": 1, "items": [1, 2, 3, 4, 5] },
  { "_id": 2, "items": [10, 20, 30] },
  { "_id": 3, "items": [5, 15, 25, 35] },
  { "_id": 4, "items": [100, 200] }
])
```

**Ejemplo de consulta**

```
db.orders.aggregate([
  {
    $project: {
      total: {
        $reduce: {
          input: "$items",
          initialValue: 0,
          in: { $add: ["$$value", "$$this"] }
        }
      }
    }
  }
])
```

**Salida**

```
[
  { "_id": 1, "total": 15 },
  { "_id": 2, "total": 60 },
  { "_id": 3, "total": 80 },
  { "_id": 4, "total": 300 }
]
```

El `$reduce` operador itera sobre la `items` matriz, añadiendo cada elemento a `initialValue` 0. El resultado es la suma de todos los elementos de la matriz.

## Ejemplos de código
<a name="reduce-code"></a>

Para ver un ejemplo de código para usar el `$reduce` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

A continuación, se muestra un ejemplo del uso del `$reduce` operador en una aplicación de Node.js:

```
const { MongoClient } = require("mongodb");

async function main() {
  const client = await MongoClient.connect("mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false");
  const db = client.db("test");
  const orders = db.collection("orders");

  const result = await orders.aggregate([
    {
      $project: {
        total: {
          $reduce: {
            input: "$items",
            initialValue: 0,
            in: { $add: ["$$value", "$$this"] }
          }
        }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

main();
```

------
#### [ Python ]

Este es un ejemplo del uso del `$reduce` operador en una aplicación de Python:

```
from pymongo import MongoClient

def main():
    client = MongoClient("mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false")
    db = client["test"]
    orders = db["orders"]

    result = list(orders.aggregate([
        {
            "$project": {
                "total": {
                    "$reduce": {
                        "input": "$items",
                        "initialValue": 0,
                        "in": { "$add": ["$$value", "$$this"] }
                    }
                }
            }
        }
    ]))

    print(result)
    client.close()

if __name__ == "__main__":
    main()
```

------

# \$1regexFind
<a name="regexFind"></a>

Nuevo desde la versión 5.0.

No es compatible con el clúster de Elastic.

El `$regexFind` operador de Amazon DocumentDB se utiliza para realizar coincidencias de expresiones regulares en los campos de cadenas de texto de los documentos. Le permite buscar y extraer subcadenas específicas que coincidan con un patrón de expresión regular determinado.

**Parámetros**
+ `input`: El campo de cadena o la expresión que se va a buscar.
+ `regex`: el patrón de expresión regular que debe coincidir.
+ `options`: (opcional) Un objeto que especifica parámetros opcionales para la expresión regular, como la distinción entre mayúsculas y minúsculas y la coincidencia de líneas múltiples. Las opciones admitidas son `i` (no distingue entre mayúsculas y minúsculas) y `m` (multilínea).

## Ejemplo (MongoDB Shell)
<a name="regexFind-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$regexFind` operador para buscar documentos en los que el `name` campo coincide con un patrón de expresión regular específico.

**Cree documentos de muestra**

```
db.users.insertMany([
  { "_id": 1, name: "John Doe", email: "john@example.com" },
  { "_id": 2, name: "Diego Ramirez", email: "diego@example.com" },
  { "_id": 3, name: "Alejandro Rosalez", email: "alejandro@example.com" },
  { "_id": 4, name: "Shirley Rodriguez", email: "shirley@example.com" }
]);
```

**Ejemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      names: {
        $regexFind: { input: '$name', regex: 'j', options: 'i' }
      }
    }
  },
  { $match: {names: {$ne: null}}}
])
```

Esta consulta devolverá todos los documentos en los que el `name` campo contenga la letra «j» (no distingue entre mayúsculas y minúsculas).

**Salida**

```
[
  { _id: 1, names: { match: 'J', idx: 0, captures: [] } }
]
```

**Nota:** Si su consulta utiliza la versión 1 del planificador de Amazon DocumentDB, debe utilizar una sugerencia para utilizar un índice. Sin una pista, la consulta puede realizar un escaneo de la colección. Para comprobar la versión del planificador y obtener más información sobre el uso de las sugerencias, consulte la [documentación del planificador de consultas de Amazon DocumentDB] (https://docs.aws.amazon.com/documentdb/latest/developerguide/query-planner.html).

## Ejemplos de código
<a name="regexFind-code"></a>

Para ver un ejemplo de código para usar el `$regexFind` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const users = db.collection('users');

  const results = await users.aggregate([
    { $project: { names: { $regexFind: { input: "$name", regex: "john", options: "i" }}}},
    { $match: {names: {$ne: null}}}
  ]).toArray();
  

  console.log(results);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
users = db['users']

results = list(users.aggregate([
    { "$project": { "names": { "$regexFind": { "input": "$name", "regex": "john", "options": "i" }}}},
    { "$match": {"names": {"$ne": None}}}
]))

print(results)

client.close()
```

------

# \$1regexFindAll
<a name="regexFindAll"></a>

Introducido en 5.0

El `$regexFindAll` operador de Amazon DocumentDB se utiliza para realizar coincidencias de expresiones regulares en los campos de cadenas de texto de los documentos. Le permite buscar y extraer subcadenas específicas que coincidan con un patrón de expresión regular determinado y devuelve todas las coincidencias de la expresión regular.

**Parámetros**
+ `input`: el campo de cadena o la expresión que se va a buscar.
+ `regex`: el patrón de expresión regular que debe coincidir.
+ `options`: (opcional) Un objeto que especifica parámetros opcionales para la expresión regular, como la distinción entre mayúsculas y minúsculas y la coincidencia de líneas múltiples. Las opciones admitidas son `i` (no distingue entre mayúsculas y minúsculas) y `m` (multilínea).

## Ejemplo (MongoDB Shell)
<a name="regexFindAll-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$regexFindAll` operador para extraer todas las secuencias de letras del `email` campo.

**Cree documentos de muestra**

```
db.users.insertMany([
  { _id: 1, name: "John Doe", email: "john@example.com", phone: "555-1234" },
  { _id: 2, name: "Jane Roe", email: "jane@example.com", phone: "555-5678" },
  { _id: 3, name: "Carlos Salazar", email: "carlos@example.com", phone: "555-3456" },
  { _id: 4, name: "Saanvi Sarkar", email: "saanvi@example.com", phone: "555-7890" }
  
]);
```

**Ejemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      emailMatches: {
        $regexFindAll: { input: '$email', regex: '[a-z]+', options: 'i' }
      }
    }
  }
])
```

**Salida**

```
[
  {
    _id: 1,
    name: 'John Doe',
    emailMatches: [
      { match: 'john', idx: 0, captures: [] },
      { match: 'example', idx: 5, captures: [] },
      { match: 'com', idx: 13, captures: [] }
    ]
  },
  {
    _id: 2,
    name: 'Jane Roe',
    emailMatches: [
      { match: 'jane', idx: 0, captures: [] },
      { match: 'example', idx: 5, captures: [] },
      { match: 'com', idx: 13, captures: [] }
    ]
  },
  {
    _id: 3,
    name: 'Carlos Salazar',
    emailMatches: [
      { match: 'carlos', idx: 0, captures: [] },
      { match: 'example', idx: 7, captures: [] },
      { match: 'com', idx: 15, captures: [] }
    ]
  },
  {
    _id: 4,
    name: 'Saanvi Sarkar',
    emailMatches: [
      { match: 'saanvi', idx: 0, captures: [] },
      { match: 'example', idx: 7, captures: [] },
      { match: 'com', idx: 15, captures: [] }
    ]
  }
]
```

**Nota:** Si su consulta utiliza la versión 1 del planificador de Amazon DocumentDB, debe utilizar una sugerencia para utilizar un índice. Sin una pista, la consulta puede realizar un escaneo de la colección. Para comprobar la versión del planificador y obtener más información sobre el uso de las sugerencias, consulte la [documentación del planificador de consultas de Amazon DocumentDB] (https://docs.aws.amazon.com/documentdb/latest/developerguide/query-planner.html).

## Ejemplos de código
<a name="regexFindAll-code"></a>

Para ver un ejemplo de código para usar el `$regexFindAll` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

A continuación, se muestra un ejemplo del uso del `$regexFind` operador en una aplicación de Node.js:

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const users = db.collection('users');

  const results = await users.aggregate([
    {
      $project: {
        name: 1,
        emailMatches: {
          $regexFindAll: { input: "$email", regex: "[a-z]+", options: "i" }
        }
      }
    }
  ]).toArray();
  
  console.log(JSON.stringify(results, null, 2));

  await client.close();
}

main();
```

------
#### [ Python ]

Este es un ejemplo del uso del `$regexFind` operador en una aplicación de Python:

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
users = db['users']

results = list(users.aggregate([
    { 
        "$project": { 
            "name": 1,
            "emailMatches": { 
                "$regexFindAll": { 
                    "input": "$email", 
                    "regex": "[a-z]+", 
                    "options": "i" 
                }
            }
        }
    }
]))

print(results)

client.close()
```

------

# \$1 RegexMatch
<a name="regexMatch"></a>

Nuevo desde la versión 5.0. No es compatible con el clúster de Elastic.

El `$regexMatch` operador de Amazon DocumentDB se utiliza para realizar coincidencias de expresiones regulares en campos de cadenas. Devuelve un valor booleano (`true`o`false`) que indica si la cadena de entrada coincide con el patrón especificado.

**Parámetros**
+ `input`: La cadena que se comparará con la expresión regular.
+ `regex`: El patrón de expresión regular que debe coincidir.
+ `options`: (Opcional) Banderas para modificar el comportamiento de la expresión regular, como la coincidencia sin distinguir entre mayúsculas y minúsculas (`i`) o la coincidencia multilínea (). `m`

## Ejemplo (MongoDB Shell)
<a name="regexMatch-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$regexMatch` operador para comprobar si los nombres comienzan por la letra «M». El operador devuelve `true` o `false` para cada documento.

**Cree documentos de muestra**

```
db.users.insertMany([
  { "_id":1, name: "María García", email: "maría@example.com" },
  { "_id":2, name: "Arnav Desai", email: "arnav@example.com" },
  { "_id":3, name: "Martha Rivera", email: "martha@example.com" },
  { "_id":4, name: "Richard Roe", email: "richard@example.com" },

]);
```

**Ejemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      startsWithM: {
        $regexMatch: {
          input: "$name",
          regex: "^M",
          options: "i"
        }
      }
    }
  }
]);
```

**Salida**

```
{ _id: 1, name: 'María García', startsWithM: true },
{ _id: 2, name: 'Arnav Desai', startsWithM: false },
{ _id: 3, name: 'Martha Rivera', startsWithM: true },
{ _id: 4, name: 'Richard Roe', startsWithM: false }
```

## Ejemplos de código
<a name="regexMatch-code"></a>

Para ver un ejemplo de código para usar el `$regexMatch` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function checkNamePattern() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('users');

  const result = await collection.aggregate([
    {
      $project: {
        name: 1,
        startsWithM: {
          $regexMatch: {
            input: "$name",
            regex: "^M",
            options: "i"
          }
        }
      }
    }
  ]).toArray();

  console.log(result);

  await client.close();
}

checkNamePattern();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def check_name_pattern():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.users

    result = list(collection.aggregate([
        {
            '$project': {
                'name': 1,
                'startsWithM': {
                    '$regexMatch': {
                        'input': '$name',
                        'regex': '^M',
                        'options': 'i'
                    }
                }
            }
        }
    ]))

    print(result)

    client.close()

check_name_pattern()
```

------

# \$1ReplaceAll
<a name="replaceAll"></a>

Introducido en 5.0

El `$replaceAll` operador de Amazon DocumentDB se utiliza para reemplazar todas las apariciones de un patrón de cadenas especificado dentro de un campo por una cadena nueva. Este operador puede resultar útil para tareas como la normalización de datos, la limpieza de texto y la manipulación de cadenas.

**Parámetros**
+ `input`: el campo o la expresión que contiene la cadena que se va a reemplazar.
+ `find`: el patrón de cadenas que se va a buscar y reemplazar.
+ `replacement`: La cadena con la que se van a reemplazar las apariciones coincidentes.

## Ejemplo (MongoDB Shell)
<a name="replaceAll-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$replaceAll` operador en una canalización de agregación para reemplazar todas las apariciones de la cadena «Chocolatier» por «Chocolate Co». en el campo «Nombre de la marca» de una colección de «productos».

**Cree documentos de muestra**

```
db.products.insertMany([
  {
    "_id": 1,
    "productId": "PROD-0Y9GL0",
    "brandName": "Gordon's Chocolatier",
    "category": "CPG",
    "rating": {
      "average": 4.8
    }
  },
  {
    "_id": 2,
    "productId": "PROD-1X2YZ3",
    "brandName": "Premium Chocolatier",
    "category": "CPG",
    "rating": {
      "average": 4.5
    }
  },
  {
    "_id": 3,
    "productId": "PROD-Y2E9H5",
    "name": "Nutrition Co. - Original Corn Flakes Cereal",
    "category": "Breakfast Cereals",
    "price": 8.5
  }
]);
```

**Ejemplo de consulta**

```
db.products.aggregate([
  {
    $addFields: {
      "brandName": {
        $replaceAll: {
          input: "$brandName",
          find: "Chocolatier",
          replacement: "Chocolate Co."
        }
      }
    }
  }
])
```

**Salida**

```
[
  {
    _id: 1,
    productId: 'PROD-0Y9GL0',
    brandName: "Gordon's Chocolate Co.",
    category: 'CPG',
    rating: { average: 4.8 }
  },
  {
    _id: 2,
    productId: 'PROD-1X2YZ3',
    brandName: 'Premium Chocolate Co.',
    category: 'CPG',
    rating: { average: 4.5 }
  },
  {
    _id: 3,
    productId: 'PROD-Y2E9H5',
    name: 'Nutrition Co. - Original Corn Flakes Cereal',
    category: 'Breakfast Cereals',
    price: 8.5,
    brandName: null
  }
]
```

## Ejemplos de código
<a name="replaceAll-code"></a>

Para ver un ejemplo de código para usar el `$replaceAll` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function replaceAll() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('products');

  const results = await collection.aggregate([
    {
      $addFields: {
        "brandName": {
          $replaceAll: {
            input: "$brandName",
            find: "Chocolatier",
            replacement: "Chocolate Co."
          }
        }
      }
    }
  ]).toArray();

  console.log(results);

  await client.close();
}

replaceAll();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def replace_all():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.products

    results = list(collection.aggregate([
        {
            "$addFields": {
                "brandName": {
                    "$replaceAll": {
                        "input": "$brandName",
                        "find": "Chocolatier",
                        "replacement": "Chocolate Co."
                    }
                }
            }
        }
    ]))

    print(results)

    client.close()

replace_all()
```

------

# \$1 ReplaceOne
<a name="replaceOne"></a>

Introducido en 5.0

El `$replaceOne` operador de Amazon DocumentDB es un operador de expresión de cadenas que se utiliza en las canalizaciones de agregación para reemplazar la primera aparición de una subcadena especificada dentro de una cadena por una cadena de reemplazo. Este operador distingue entre mayúsculas y minúsculas y solo reemplaza la primera coincidencia encontrada.

**Parámetros**
+ `input`: La cadena (campo) en la que se va a realizar la búsqueda.
+ `find`: La cadena que se va a buscar en la entrada.
+ `replacement`: La cadena que sustituirá a la primera aparición de la búsqueda en la entrada (campo).

## Ejemplo (MongoDB Shell)
<a name="replaceOne-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$replaceOne` operador dentro de una canalización de agregación para reemplazar las subcadenas en los nombres de los productos.

**Cree documentos de muestra**

```
db.products.insertMany([
  { "_id":1, "productId": "PROD-0Y9GL0", "name": "Gordon's Extra Creamy Milk Chocolate - Pack of 4", "category": "Confectionery", "price": 24.99 },
  { "_id":2, "productId": "PROD-Y2E9H5", "name": "Nutrition Co. - Original Corn Flakes Cereal", "category": "Breakfast Cereals", "price": 8.50 },
  { "_id":3, "productId": "PROD-Z3F8K2", "name": "Gordon's Dark Chocolate (90% Cocoa) Pack - Pack of 4", "category": "Confectionery", "price": 28.99 }
]);
```

**Ejemplo de agregación**

```
db.products.aggregate([
  {
    $addFields: {
      standardizedName: {
        $replaceOne: {
          input: "$name",
          find: "Pack",
          replacement: "Package"
        }
      }
    }
  }
]);
```

**Salida**

El resultado muestra que solo la primera vez que aparece «Pack» en cada nombre de producto se sustituyó por «Package».

```
[
  {
    _id: 1,
    productId: 'PROD-0Y9GL0',
    name: "Gordon's Extra Creamy Milk Chocolate - Pack of 4",
    category: 'Confectionery',
    price: 24.99,
    standardizedName: "Gordon's Extra Creamy Milk Chocolate - Package of 4"
  },
  {
    _id: 2,
    productId: 'PROD-Y2E9H5',
    name: 'Nutrition Co. - Original Corn Flakes Cereal',
    category: 'Breakfast Cereals',
    price: 8.5,
    standardizedName: 'Nutrition Co. - Original Corn Flakes Cereal'
  },
  {
    _id: 3,
    productId: 'PROD-Z3F8K2',
    name: "Gordon's Dark Chocolate (90% Cocoa) Pack - Pack of 4",
    category: 'Confectionery',
    price: 28.99,
    standardizedName: "Gordon's Dark Chocolate (90% Cocoa) Package - Pack of 4"
  }
```

## Ejemplos de código
<a name="replaceOne-code"></a>

Para ver un ejemplo de código para usar el `$replaceOne` comando, selecciona la pestaña correspondiente al idioma que deseas usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function replaceOne() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('products');

  const pipeline = [
    {
      $addFields: {
        standardizedName: {
          $replaceOne: {
            input: '$name',
            find: 'Pack',
            replacement: 'Package'
          }
        }
      }
    }
  ];

  const result = await collection.aggregate(pipeline).toArray();
  console.log(result);

  await client.close();
}

replaceOne();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def replaceOne():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['products']

    pipeline = [
        {
            '$addFields': {
                'standardizedName': {
                    '$replaceOne': {
                        'input': '$name',
                        'find': 'Pack',
                        'replacement': 'Package'
                    }
                }
            }
        }
    ]

    result = list(collection.aggregate(pipeline))
    print(result)

    client.close()

replaceOne()
```

------

# \$1replaceRoot
<a name="replaceRoot"></a>

El `$replaceRoot` operador se utiliza para reemplazar el documento raíz por el documento incrustado especificado. Esto resulta útil cuando se quiere promover un documento anidado al nivel superior o reestructurar la salida de datos.

**Parámetros**
+ `newRoot`: el nuevo documento raíz que sustituirá al documento raíz existente.

## Ejemplo (MongoDB Shell)
<a name="replaceRoot-examples"></a>

En este ejemplo se muestra cómo extraer la información de las direcciones de envío de los pedidos de los clientes, lo que resulta útil para generar etiquetas de envío o listas de direcciones.

**Crea documentos de muestra**

```
db.orders.insertMany([
  {
    "_id":1, "orderId": "ORD-2024-001", "customerId": "CUST-12345", "orderDate": "2024-01-15", "shippingAddress": { "name": "María García", "street": "123 Main St", "city": "Seattle", "state": "WA", "zipCode": "98101", "country": "USA" },"totalAmount": 149.99 },
  { "_id":2, "orderId": "ORD-2024-002", "customerId": "CUST-67890", "orderDate": "2024-01-16", "shippingAddress": { "name": "Arnav Desai", "street": "456 Oak Ave", "city": "Portland", "state": "OR", "zipCode": "97201", "country": "USA" }, "totalAmount": 89.50 } ])
```

**Ejemplo de consulta**

```
db.orders.aggregate([
  {
    $replaceRoot: {
      newRoot: "$shippingAddress"
    }
  }
])
```

**Salida**

```
{
    name: 'María García',
    street: '123 Main St',
    city: 'Seattle',
    state: 'WA',
    zipCode: '98101',
    country: 'USA'
  },
  {
    name: 'Arnav Desai',
    street: '456 Oak Ave',
    city: 'Portland',
    state: 'OR',
    zipCode: '97201',
    country: 'USA'
  }
```

## Ejemplos de código
<a name="replaceRoot-code"></a>

Para ver un ejemplo de código para usar el `$replaceRoot` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function extractShippingAddresses() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('orders');

  const result = await collection.aggregate([
    {
      $replaceRoot: {
        newRoot: "$shippingAddress"
      }
    }
  ]).toArray();

  console.log(result);

  await client.close();
}

extractShippingAddresses();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def extract_shipping_addresses():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['orders']

    result = list(collection.aggregate([
        {
            "$replaceRoot": {
                "newRoot": "$shippingAddress"
            }
        }
    ]))

    print(result)

    client.close()

extract_shipping_addresses()
```

------

# \$1 Reemplazar con
<a name="replaceWith"></a>

Nuevo desde la versión 8.0

No es compatible con el clúster de Elastic.

La etapa de `$replaceWith` agregación de Amazon DocumentDB se utiliza para reemplazar el documento de entrada por un documento nuevo. Todos los campos existentes en el documento de entrada, incluido el campo \$1id, se sustituyen por el nuevo documento. `$replaceWith`se suele utilizar para aplanar documentos o para llevar un documento incrustado al nivel superior.

**Parámetros**
+ `<replacement>`(obligatorio): el nuevo documento que sustituirá al documento existente.

## Ejemplo (MongoDB Shell)
<a name="replaceWith-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$replaceWith` operador para reemplazar un documento existente en una colección de Amazon DocumentDB.

**Cree documentos de muestra**

```
db.restaurants.insertMany([
  {
    "restaurantId": "REST-0Y9GL0",
    "name": "Biryani Adda",
    "cuisine": "Indian",
    "ratings": [ 3, 4, 3, 2, 2, 4, 1, 5, 5, 5 ]
  },
  {
    "restaurantId": "REST-8L2PX9",
    "name": "The Burger Spot",
    "cuisine": "American",
    "ratings": [ 2, 3, 4, 5, 3, 1, 1, 2, 4 ]
  }
]);
```

**Ejemplo de consulta**

```
db.restaurants.aggregate([
  { $replaceWith: {
      name: "$name",
      cuisine: "$cuisine",
      rating: { $avg: "$ratings" }
    }
  }
]);
```

**Salida**

```
[
  {
    name: 'Biryani Adda',
    cuisine: 'Indian',
    rating: 3.4
  },
  {
    name: 'The Burger Spot',
    cuisine: 'American',
    rating: 2.7777777777777777
  }
]
```

## Ejemplos de código
<a name="replaceWith-code"></a>

Para ver un ejemplo de código para usar el `$replaceWith` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function replaceDoc() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('restaurants');

  const result = await collection.aggregate([
    { $replaceWith: {
        name: "description_index",
        cuisine: 2,
        rating: { $avg: "$ratings" }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

replaceDoc();
```

------
#### [ Python ]

```
from pymongo import MongoClient


def replace_document():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.restaurants

    result = list(collection.aggregate([
        {
            '$replaceWith': {
                'name': "$name",
                'cuisine': "$cuisine",
                'rating': { '$avg': "$ratings"}
            }
        }
    ]))

    print(result)
    client.close()

replace_document()
```

------

# \$1reverseArray
<a name="reverseArray"></a>

El `$reverseArray` operador de Amazon DocumentDB se utiliza para invertir los elementos de una matriz en el orden especificado. Este operador resulta útil cuando necesita reordenar los elementos de una matriz en la dirección inversa.

**Parámetros**
+ `expression`: La expresión matricial que se va a invertir.

## Ejemplo (MongoDB Shell)
<a name="reverseArray-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$reverseArray` operador para invertir el orden de los elementos de una matriz.

**Cree documentos de muestra**

```
db.miles.insertMany([
  { "_id" : 1, "member_since" : ISODate("1987-01-01T00:00:00Z"), "credit_card" : false, "flight_miles" : [ 1205, 2560, 880 ]},
  { "_id" : 2, "member_since" : ISODate("1982-01-01T00:00:00Z"), "credit_card" : true, "flight_miles" : [ 1205, 2560, 890, 2780]},
  { "_id" : 3, "member_since" : ISODate("1999-01-01T00:00:00Z"), "credit_card" : true, "flight_miles" : [ 1205, 880]}
]);
```

**Ejemplo de consulta**

```
db.miles.aggregate([
  {
    $project: {
      _id: 1,
      member_since: 1,
      credit_card: 1,
      reversed_flight_miles: { $reverseArray: "$flight_miles" }
    }
  }
]);
```

**Salida**

```
{ "_id" : 1, "member_since" : ISODate("1987-01-01T00:00:00Z"), "credit_card" : false, "reversed_flight_miles" : [ 880, 2560, 1205 ] }
{ "_id" : 2, "member_since" : ISODate("1982-01-01T00:00:00Z"), "credit_card" : true, "reversed_flight_miles" : [ 2780, 890, 2560, 1205 ] }
{ "_id" : 3, "member_since" : ISODate("1999-01-01T00:00:00Z"), "credit_card" : true, "reversed_flight_miles" : [ 880, 1205 ] }
```

En este ejemplo, el `$reverseArray` operador se utiliza para invertir el orden de la `flight_miles` matriz. El `reversed_flight_miles` campo resultante de la salida muestra los elementos de la matriz en el orden inverso.

## Ejemplos de código
<a name="reverseArray-code"></a>

Para ver un ejemplo de código para usar el `$reverseArray` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

A continuación, se muestra un ejemplo del uso del `$reverseArray` operador en una aplicación de Node.js:

```
const { MongoClient } = require('mongodb');

async function reverseArray() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('miles');

  const result = await collection.aggregate([
    {
      $project: {
        _id: 1,
        member_since: 1,
        credit_card: 1,
        reversed_flight_miles: { $reverseArray: '$flight_miles' }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

reverseArray();
```

------
#### [ Python ]

Este es un ejemplo del uso del `$reverseArray` operador en una aplicación de Python:

```
from pymongo import MongoClient

def reverse_array():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.miles

    result = list(collection.aggregate([
        {
            '$project': {
                '_id': 1,
                'member_since': 1,
                'credit_card': 1,
                'reversed_flight_miles': { '$reverseArray': '$flight_miles' }
            }
        }
    ]))

    print(result)
    client.close()

reverse_array()
```

------

# \$1rtrim
<a name="rtrim"></a>

Nuevo desde la versión 4.0.

No es compatible con el clúster de Elastic.

El `$rtrim` operador de Amazon DocumentDB se utiliza para eliminar los caracteres finales de una cadena. De forma predeterminada, elimina los espacios en blanco finales, pero también puede especificar un conjunto de caracteres para eliminarlos pasando el argumento chars.

**Parámetros**
+ `input`: la cadena de entrada de la que se van a eliminar los espacios en blanco finales.
+ `chars`: (opcional) Para eliminar caracteres específicos.

## Ejemplo (MongoDB Shell)
<a name="rtrim-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$rtrim` operador para eliminar los últimos caracteres especificados («\$1») de una cadena.

**Cree documentos de muestra**

```
db.collection.insert([
  { "name": "John Doe*  ", "age": 30 },
  { "name": "Jane Smith  ", "age": 25 },
  { "name": "Bob Johnson", "age": 35 }
]);
```

**Ejemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      _id: 0,
      name: { $rtrim: { input: "$name", chars: " *" } }, 
      age: 1
    }
  }
]);
```

**Salida**

```
[
  { age: 30, name: 'John Doe' },
  { age: 25, name: 'Jane Smith' },
  { age: 35, name: 'Bob Johnson' }
]
```

## Ejemplos de código
<a name="rtrim-code"></a>

Para ver un ejemplo de código para usar el `$rtrim` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient, Bson } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

  try {

    const db = client.db('test');
    const collection = db.collection('collection');  

    const pipeline = [
      {
        $project: {
          _id: 0,
          name: { $rtrim: { input: "$name", chars: " *" } },
          age: 1
        }
      }
    ];

    const results = await collection.aggregate(pipeline).toArray();
    console.dir(results, { depth: null });

  } catch (err) {
    console.error('Error occurred:', err);
  } finally {
    await client.close();
  }
}

example().catch(console.error);
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

    try:

        db = client.test
        collection = db.collection

        pipeline = [
            {
                "$project": {
                    "_id": 0,
                    "name": { "$rtrim": { "input": "$name", "chars": " *" } },
                    "age": 1
                }
            }
        ]

        results = collection.aggregate(pipeline)

        for doc in results:
            print(doc)

    except Exception as e:
        print(f"An error occurred: {e}")

    finally:
        client.close()

example()
```

------

# \$1sample
<a name="sample"></a>

La etapa de `$sample` agregación de Amazon DocumentDB se utiliza para seleccionar aleatoriamente un número específico de documentos de una colección. Esto resulta útil para tareas como el análisis de datos, las pruebas y la generación de muestras para su posterior procesamiento.

**Parámetros**
+ `size`: el número de documentos que se van a seleccionar de forma aleatoria.

## Ejemplo (MongoDB Shell)
<a name="sample-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$sample` escenario para seleccionar aleatoriamente dos documentos de la `temp` colección.

**Cree documentos de muestra**

```
db.temp.insertMany([
  { "_id": 1, "temperature": 97.1, "humidity": 0.60, "timestamp": ISODate("2019-03-21T21:17:22.425Z") },
  { "_id": 2, "temperature": 98.2, "humidity": 0.59, "timestamp": ISODate("2019-03-21T21:17:22.425Z") },
  { "_id": 3, "temperature": 96.8, "humidity": 0.61, "timestamp": ISODate("2019-03-21T21:17:22.425Z") },
  { "_id": 4, "temperature": 97.9, "humidity": 0.61, "timestamp": ISODate("2019-03-21T21:17:22.425Z") },
  { "_id": 5, "temperature": 97.5, "humidity": 0.60, "timestamp": ISODate("2019-03-21T21:17:22.425Z") },
  { "_id": 6, "temperature": 98.0, "humidity": 0.59, "timestamp": ISODate("2019-03-21T21:17:22.425Z") },
  { "_id": 7, "temperature": 97.2, "humidity": 0.60, "timestamp": ISODate("2019-03-21T21:17:22.425Z") },
  { "_id": 8, "temperature": 98.1, "humidity": 0.59, "timestamp": ISODate("2019-03-21T21:17:22.425Z") },
  { "_id": 9, "temperature": 96.9, "humidity": 0.62, "timestamp": ISODate("2019-03-21T21:17:22.425Z") },
  { "_id": 10, "temperature": 97.7, "humidity": 0.60, "timestamp": ISODate("2019-03-21T21:17:22.425Z") }
]);
```

**Ejemplo de consulta**

```
db.temp.aggregate([
   { $sample: { size: 2 } }
])
```

**Salida**

```
{ "_id" : 4, "temperature" : 97.9, "humidity" : 0.61, "timestamp" : ISODate("2019-03-21T21:17:22.425Z") }
{ "_id" : 9, "temperature" : 96.9, "humidity" : 0.62, "timestamp" : ISODate("2019-03-21T21:17:22.425Z") }
```

Como muestran los resultados, 2 de los 10 documentos se muestrearon aleatoriamente. Ahora puede usar estos documentos para determinar un promedio o realizar min/max cálculos.

## Ejemplos de código
<a name="sample-code"></a>

Para ver un ejemplo de código para usar el `$sample` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function sampleDocuments() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('temp');

  const result = await collection.aggregate([
    { $sample: { size: 2 } }
  ]).toArray();

  console.log(result);
  await client.close();
}

sampleDocuments();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def sample_documents():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['temp']

    result = list(collection.aggregate([
        { '$sample': { 'size': 2 } }
    ]))

    print(result)
    client.close()

sample_documents()
```

------

# \$1search
<a name="search"></a>

Nuevo a partir de la versión 5.0.

El `$search` operador de Amazon DocumentDB se utiliza para proporcionar capacidades de búsqueda de texto.

**Parámetros**

Ninguno

## Ejemplo (MongoDB Shell)
<a name="search-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$search` operador para realizar una consulta de búsqueda de texto.

**Cree documentos de muestra**

```
db.textcollection.createIndex({"description": "text"});

db.textcollection.insertMany([
  { _id: 1, name: "John Doe", description: "This is a sample document about John Doe." },
  { _id: 2, name: "Jane Smith", description: "This is a sample document about Jane Smith." },
  { _id: 3, name: "Bob Johnson", description: "This is a sample document about Bob Johnson." },
  { _id: 4, name: "Jon Jeffries", description: "This is a sample document about Jon Jeffries." }
]);
```

**Ejemplo de consulta**

```
db.textcollection.find(
  { $text: { $search: "John" } }
);
```

**Salida**

```
[
  {
    _id: 1,
    name: 'John Doe',
    description: 'This is a sample document about John Doe.'
  }
]
```

## Ejemplos de código
<a name="search-code"></a>

Para ver un ejemplo de código para usar el `$search` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findWithText() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('textcollection');

  const result = await collection.find(
    { $text: { $search: "John" } }
  ).sort({ score: { $meta: "textScore" } }).toArray();

  console.log(result);
  client.close();
}

findWithText();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_with_text():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['textcollection']

    result = list(collection.find(
        { '$text': { '$search': 'John' } }
    ))

    print(result)
    client.close()

find_with_text()
```

------

# \$1second
<a name="second"></a>

El `$second` operador de Amazon DocumentDB extrae el componente de segundos de una fecha o marca horaria. Se utiliza para recuperar el valor de los segundos de un campo de fecha o marca de tiempo.

**Parámetros**
+ `expression`: El campo de fecha o marca horaria del que se extrae el valor de los segundos. Esta expresión puede ser una ruta de campo o cualquier expresión válida que se resuelva en una fecha o una marca de tiempo.

## Ejemplo (MongoDB Shell)
<a name="second-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$second` operador para extraer el componente de segundos de un campo de fecha.

**Cree documentos de muestra**

```
db.users.insertMany([
  { name: "John", dob: new Date("1990-05-15T12:30:45Z") },
  { name: "Jane", dob: new Date("1985-09-20T23:59:59Z") },
  { name: "Bob", dob: new Date("2000-01-01T00:00:00Z") }
]);
```

**Ejemplo de consulta**

```
db.users.aggregate([{ $project: { name: 1, dobSeconds: { $second: "$dob" } } }])
```

**Salida**

```
[
  { "_id" : ObjectId("6089a9c306a829d1f8b456a1"), "name" : "John", "dobSeconds" : 45 },
  { "_id" : ObjectId("6089a9c306a829d1f8b456a2"), "name" : "Jane", "dobSeconds" : 59 },
  { "_id" : ObjectId("6089a9c306a829d1f8b456a3"), "name" : "Bob", "dobSeconds" : 0 }
]
```

## Ejemplos de código
<a name="second-code"></a>

Para ver un ejemplo de código para usar el `$second` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const users = db.collection('users');

  const result = await users.aggregate([{ $project: { name: 1, dobSeconds: { $second: '$dob' } } }]).toArray();
  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    users = db['users']

    result = list(users.aggregate([{'$project': {'name': 1, 'dobSeconds': {'$second': '$dob'}}}]))
    print(result)

    client.close()

example ()
```

------

# \$1set
<a name="set-stage"></a>

Nuevo desde la versión 8.0

No es compatible con el clúster de Elastic.

La etapa de `$set` agregación de Amazon DocumentDB le permite añadir nuevos campos o actualizar los valores de los campos existentes en la documentación durante una canalización de agregación.

**Parámetros**
+ `expression`: La expresión que se va a evaluar. Puede ser cualquier expresión de agregación válida, incluidas las referencias de campo y las operaciones aritméticas.

## Ejemplo (MongoDB Shell)
<a name="set-stage-examples"></a>

El siguiente ejemplo demuestra el uso de la etapa de `$set` agregación para calcular los totales multiplicando el campo por el `quantity` campo. `price`

**Cree documentos de muestra**

```
db.inventory.insertMany([
  { item: "pencil", quantity: 100, price: 0.24},
  { item: "pen", quantity: 204, price: 1.78 }
]);
```

**Ejemplo de agregación**

```
db.inventory.aggregate([
  {
    $set: {
      total: { $multiply: ["$quantity", "$price"] }
    }
  }
])
```

**Salida**

```
[
  {
    _id: ObjectId('69248951d66dcae121d2950d'),
    item: 'pencil',
    quantity: 100,
    price: 0.24,
    total: 24
  },
  {
    _id: ObjectId('69248951d66dcae121d2950e'),
    item: 'pen',
    quantity: 204,
    price: 1.78,
    total: 363.12
  }
]
```

## Ejemplos de código
<a name="set-stage-code"></a>

Para ver un ejemplo de código para usar el `$set` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const inventory = db.collection('inventory');

  const result = await inventory.aggregate([
      {
        $set: {
          total: { $multiply: ["$quantity", "$price"] }
        }
      }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    inventory = db['inventory']

    result = list(inventory.aggregate([
      {
        "$set": {
          "total": { "$multiply": ["$quantity", "$price"] }
        }
      }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1setDifference
<a name="setDifference"></a>

Nuevo desde la versión 4.0.

El `$setDifference` operador de Amazon DocumentDB se utiliza para comparar dos conjuntos y devolver los elementos que se encuentran en el primer conjunto pero no en el segundo. Este operador es útil para encontrar los elementos únicos entre dos conjuntos.

**Parámetros**
+ `firstSet`: El primer conjunto que se va a comparar.
+ `secondSet`: El segundo conjunto para comparar.

## Ejemplo (MongoDB Shell)
<a name="setDifference-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$setDifference` operador para encontrar los elementos únicos entre dos conjuntos.

**Cree documentos de muestra**

```
db.collection.insertMany([
  { _id: 1, fruits: ["apple", "banana", "cherry", "date"] },
  { _id: 2, fruits: ["banana", "cherry", "date", "elderberry"] }
]);
```

**Ejemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      uniqueFruits: { $setDifference: ["$fruits", ["banana", "cherry", "date"]] }
    }
  }
]);
```

**Salida**

```
[
  { "_id": 1, "uniqueFruits": ["apple"] },
  { "_id": 2, "uniqueFruits": ["elderberry"] }
]
```

La consulta realiza los siguientes pasos:

1. Utiliza el `$project` escenario para crear un campo nuevo `uniqueFruits` para cada documento.

2. El `$setDifference` operador compara la `fruits` matriz con la matriz `[&quot;banana&quot;, &quot;cherry&quot;, &quot;date&quot;]` y devuelve los elementos únicos de la `fruits` matriz.

## Ejemplos de código
<a name="setDifference-code"></a>

Para ver un ejemplo de código para usar el `$setDifference` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

A continuación, se muestra un ejemplo de cómo utilizar el `$setDifference` operador en una aplicación de Node.js:

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('mycollection');

  // Insert sample documents
  await collection.insertMany([
    { _id: 1, fruits: ["apple", "banana", "cherry", "date"] },
    { _id: 2, fruits: ["banana", "cherry", "date", "elderberry"] }
  ]);

 // Query using $setDifference
  const result = await collection.aggregate([
    {
      $project: {
        uniqueFruits: { $setDifference: ["$fruits", ["banana", "cherry", "date"]] }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

main();
```

------
#### [ Python ]

Este es un ejemplo de cómo usar el `$setDifference` operador en una aplicación de Python:

```
from pymongo import MongoClient

def main():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['mycollection']

    # Insert sample documents
    collection.insert_many([
        {'_id': 1, 'fruits': ["apple", "banana", "cherry", "date"]},
        {'_id': 2, 'fruits': ["banana", "cherry", "date", "elderberry"]}
    ])

    # Query using $setDifference
    result = list(collection.aggregate([
        {
            '$project': {
                'uniqueFruits': {'$setDifference': ['$fruits', ["banana", "cherry", "date"]]}
            }
        }
    ]))

    print(result)
    client.close()

if __name__ == '__main__':
    main()
```

------

# \$1setEquals
<a name="setEquals"></a>

El `$setEquals` operador de Amazon DocumentDB se utiliza para determinar si dos conjuntos son iguales. Compara dos matrices y devuelve `true` si contienen los mismos elementos distintos, independientemente de su orden.

**Parámetros**
+ `expression1`: La primera matriz que se va a comparar.
+ `expression2`: La segunda matriz que se va a comparar.

## Ejemplo (MongoDB Shell)
<a name="setEquals-examples"></a>

El siguiente ejemplo demuestra el uso del `$setEquals` operador para comparar dos conjuntos de valores.

**Cree documentos de muestra**

```
db.collection.insertMany([
  { _id: 1, fruits: ["apple", "banana", "cherry"] },
  { _id: 2, fruits: ["banana", "apple", "cherry"] },
  { _id: 3, fruits: ["apple", "banana", "orange"] }
])
```

**Ejemplo de consulta**

```
db.collection.find({
  $expr: {
    $setEquals: ["$fruits", ["apple", "banana", "cherry"]]
  }
})
```

**Salida**

```
{ "_id" : 1, "fruits" : [ "apple", "banana", "cherry" ] }
{ "_id" : 2, "fruits" : [ "banana", "apple", "cherry" ] }
```

La consulta utiliza el `$setEquals` operador para comparar el `fruits` campo de cada documento con la matriz`[&quot;apple&quot;, &quot;banana&quot;, &quot;cherry&quot;]`. Se devuelven los documentos en los que el `fruits` campo es igual a la matriz de comparación.

## Ejemplos de código
<a name="setEquals-code"></a>

Para ver un ejemplo de código para usar el `$setEquals` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('mycollection');

  // Insert sample documents
  await collection.insertMany([
    { _id: 1, fruits: ["apple", "banana", "cherry"] },
    { _id: 2, fruits: ["banana", "apple", "cherry"] },
    { _id: 3, fruits: ["apple", "banana", "orange"] }
  ]);

  // Query using $setEquals
  const result = await collection.find({
    $expr: {
      $setEquals: ["$fruits", ["apple", "banana", "cherry"]]
    }
  }).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['mycollection']

    # Insert sample documents
    collection.insert_many([
        {"_id": 1, "fruits": ["apple", "banana", "cherry"]},
        {"_id": 2, "fruits": ["banana", "apple", "cherry"]},
        {"_id": 3, "fruits": ["apple", "banana", "orange"]}
    ])

    # Query using $setEquals
    result = list(collection.find({
        "$expr": {
            "$setEquals": ["$fruits", ["apple", "banana", "cherry"]]
        }
    }))

    print(result)
    client.close()

example()
```

------

# \$1setIntersection
<a name="setIntersection"></a>

El `$setIntersection` operador de Amazon DocumentDB se utiliza para devolver los elementos comunes entre dos o más matrices. Este operador resulta especialmente útil cuando se trabaja con conjuntos de datos, ya que permite encontrar la intersección de varios conjuntos.

**Parámetros**
+ `array1`: La primera matriz que se interseca.
+ `array2`: La segunda matriz que se interseca.
+ `arrayN`: (opcional) Matrices adicionales para intersecar.

## Ejemplo (MongoDB Shell)
<a name="setIntersection-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$setIntersection` operador para encontrar los elementos comunes entre dos matrices.

**Cree documentos de muestra**

```
db.collection.insertMany([
  { _id: 1, colors: ["red", "blue", "green"] },
  { _id: 2, colors: ["blue", "yellow", "orange"] },
  { _id: 3, colors: ["red", "green", "purple"] }
])
```

**Ejemplo de consulta**

```
db.collection.aggregate([
  { $project: {
      _id: 1,
      commonColors: { $setIntersection: ["$colors", ["red", "blue", "green"]] }
    }
  }
])
```

**Salida**

```
[
  { "_id": 1, "commonColors": ["red", "blue", "green"] },
  { "_id": 2, "commonColors": ["blue"] },
  { "_id": 3, "commonColors": ["red", "green"] }
]
```

## Ejemplos de código
<a name="setIntersection-code"></a>

Para ver un ejemplo de código para usar el `$setIntersection` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('mycollection');

  const result = await collection.aggregate([
    {
      $project: {
        _id: 1,
        commonColors: { $setIntersection: ["$colors", ["red", "blue", "green"]] }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['mycollection']

    result = list(collection.aggregate([
        {
            '$project': {
                '_id': 1,
                'commonColors': { '$setIntersection': ["$colors", ["red", "blue", "green"]] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1setIsSubset
<a name="setIsSubset"></a>

El `$setIsSubset` operador de Amazon DocumentDB se utiliza para determinar si un conjunto de valores es un subconjunto de otro conjunto. Resulta útil para realizar comparaciones y operaciones basadas en conjuntos en campos de matriz.

**Parámetros**
+ `field`: El campo al que se va a aplicar el `$setIsSubset` operador.
+ `set`: El conjunto con el que comparar el campo.

## Ejemplo (MongoDB Shell)
<a name="setIsSubset-examples"></a>

El siguiente ejemplo demuestra el uso del `$setIsSubset` operador para comprobar si el `tags` campo es un subconjunto del conjunto especificado.

**Cree documentos de muestra**

```
db.products.insertMany([
  { _id: 1, name: "Product A", tags: ["tag1", "tag2", "tag3"] },
  { _id: 2, name: "Product B", tags: ["tag1", "tag2"] },
  { _id: 3, name: "Product C", tags: ["tag2", "tag3"] }
]);
```

**Ejemplo de consulta**

```
db.products.find({
  $expr: { $setIsSubset: [["tag1", "tag2"], "$tags"] }
})
```

\$1Nota: \$1 `$setIsSubset` es un operador de agregación y no se puede usar directamente en las consultas find (). En este ejemplo, `$expr` se usa con `find()` para cerrar la brecha entre los operadores de consulta y las expresiones de agregación.

**Salida**

```
[
  { "_id" : 1, "name" : "Product A", "tags" : [ "tag1", "tag2", "tag3" ] },
  { "_id" : 2, "name" : "Product B", "tags" : [ "tag1", "tag2" ] }
]
```

La consulta devuelve los documentos en los que el `tags` campo es un subconjunto del conjunto`[&quot;tag1&quot;, &quot;tag2&quot;]`.

## Ejemplos de código
<a name="setIsSubset-code"></a>

Para ver un ejemplo de código para usar el `$setIsSubset` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('products');

  const result = await collection.find({
    $expr: { $setIsSubset: [["tag1", "tag2"], "$tags"] }
  }).toArray();

  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['products']

    result = list(collection.find({
        '$expr': {'$setIsSubset': [['tag1', 'tag2'], '$tags']}
    }))

    print(result)

    client.close()

example()
```

------

# \$1setUnion
<a name="setUnion"></a>

El operador de `$setUnion` agregación de Amazon DocumentDB se utiliza para combinar dos o más conjuntos de valores y devolver un conjunto que contiene todos los elementos únicos de los conjuntos de entrada. Este operador resulta útil cuando necesita realizar operaciones basadas en conjuntos en campos matriciales de sus documentos.

**Parámetros**
+ `expression1`: expresión que se convierte en una matriz.
+ `expression2`: expresión que se convierte en una matriz.
+ `expressionN`: Expresiones adicionales que se convierten en matrices (opcional).

## Ejemplo (MongoDB Shell)
<a name="setUnion-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$setUnion` operador para combinar los elementos únicos de dos campos de matriz de una colección.

**Cree documentos de muestra**

```
db.users.insertMany([
  { _id: 1, name: "Alice", hobbies: ["reading", "swimming"], skills: ["coding", "writing"] },
  { _id: 2, name: "Bob", hobbies: ["cooking", "gardening"], skills: ["coding", "photography"] },
  { _id: 3, name: "Charlie", hobbies: ["reading", "painting"], skills: ["gardening", "music"] }
]);
```

**Ejemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      allInterests: { $setUnion: ["$hobbies", "$skills"] }
    }
  }
]);
```

**Salida**

```
[
  { "_id" : 1, "name" : "Alice", "allInterests" : [ "coding", "reading", "swimming", "writing" ] },
  { "_id" : 2, "name" : "Bob", "allInterests" : [ "coding", "cooking", "gardening", "photography" ] },
  { "_id" : 3, "name" : "Charlie", "allInterests" : [ "gardening", "music", "painting", "reading" ] }
]
```

En este ejemplo, el `$setUnion` operador se utiliza para combinar los elementos únicos de los campos `hobbies` y `skills` matriz de cada documento de usuario. El `allInterests` campo resultante contiene la unión de todas las aficiones y habilidades únicas de cada usuario.

## Ejemplos de código
<a name="setUnion-code"></a>

Para ver un ejemplo de código para usar el `$setUnion` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const users = db.collection('users');

  const result = await users.aggregate([
    {
      $project: {
        _id: 1,
        name: 1,
        allInterests: { $setUnion: ["$hobbies", "$skills"] }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    users = db['users']

    result = list(users.aggregate([
        {
            '$project': {
                '_id': 1,
                'name': 1,
                'allInterests': { '$setUnion': ["$hobbies", "$skills"] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1skip
<a name="skip"></a>

En Amazon DocumentDB, el `$skip` operador se utiliza para desplazar el punto de partida de los resultados de la consulta, lo que le permite recuperar un subconjunto específico de los documentos coincidentes. Esto resulta especialmente útil en los escenarios de paginación, en los que desea recuperar las siguientes páginas de resultados.

**Parámetros**
+ `skip`: el número de documentos que se van a omitir antes de devolver los documentos restantes.

## Ejemplo (MongoDB Shell)
<a name="skip-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$skip` operador para recuperar la segunda página de resultados (documentos 11 a 20) de una colección.

**Cree documentos de muestra**

```
db.collection.insert([
  { "name": "Document 1" },
  { "name": "Document 2" },
  { "name": "Document 3" },
  { "name": "Document 4" },
  { "name": "Document 5" },
  { "name": "Document 6" },
  { "name": "Document 7" },
  { "name": "Document 8" },
  { "name": "Document 9" },
  { "name": "Document 10" },
  { "name": "Document 11" },
  { "name": "Document 12" },
  { "name": "Document 13" },
  { "name": "Document 14" },
  { "name": "Document 15" },
  { "name": "Document 16" },
  { "name": "Document 17" },
  { "name": "Document 18" },
  { "name": "Document 19" },
  { "name": "Document 20" }
]);
```

**Ejemplo de consulta**

```
db.collection.find({}, { "name": 1 })
             .skip(10)
             .limit(10);
```

**Salida**

```
[
  { "_id" : ObjectId("..."), "name" : "Document 11" },
  { "_id" : ObjectId("..."), "name" : "Document 12" },
  { "_id" : ObjectId("..."), "name" : "Document 13" },
  { "_id" : ObjectId("..."), "name" : "Document 14" },
  { "_id" : ObjectId("..."), "name" : "Document 15" },
  { "_id" : ObjectId("..."), "name" : "Document 16" },
  { "_id" : ObjectId("..."), "name" : "Document 17" },
  { "_id" : ObjectId("..."), "name" : "Document 18" },
  { "_id" : ObjectId("..."), "name" : "Document 19" },
  { "_id" : ObjectId("..."), "name" : "Document 20" }
]
```

## Ejemplos de código
<a name="skip-code"></a>

Para ver un ejemplo de código para usar el `$skip` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('collection');

  const results = await collection.find({}, { projection: { name: 1 } })
                                 .skip(10)
                                 .limit(10)
                                 .toArray();

  console.log(results);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def main():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.mydatabase
    collection = db.collection

    results = list(collection.find({}, {'name': 1})
                   .skip(10)
                   .limit(10))

    print(results)

    client.close()

if __name__ == '__main__':
    main()
```

------

# \$1slice
<a name="slice"></a>

El operador de `$slice` agregación permite devolver un subconjunto de una matriz recorriendo la matriz desde el principio o el final de la matriz. Se utiliza para mostrar un número limitado de elementos de un campo de matriz, como los N elementos superiores o inferiores.

**Parámetros**
+ `array`: El campo de matriz que se va a dividir.
+ `n`: un entero que especifica el número de elementos que se van a devolver. Un valor positivo comienza desde el principio de la matriz, mientras que un valor negativo comienza desde el final de la matriz.

## Ejemplo (MongoDB Shell)
<a name="slice-examples"></a>

El siguiente ejemplo muestra cómo se utilizan `$slice` para devolver los dos primeros dulces favoritos de cada chef.

**Cree documentos de muestra**

```
db.sweets.insertMany([
  { "_id" : 1, "name" : "Alvin", "favorites": [ "chocolate", "cake", "toffee", "beignets" ] },
  { "_id" : 2, "name" : "Tom", "favorites": [ "donuts", "pudding", "pie" ] },
  { "_id" : 3, "name" : "Jessica", "favorites": [ "fudge", "smores", "pudding", "cupcakes" ] },
  { "_id" : 4, "name" : "Rachel", "favorites": [ "ice cream" ] }
]);
```

**Ejemplo de consulta**

```
db.sweets.aggregate([
  { $project: { _id: 0, name: 1, topTwoFavorites: { $slice: [ "$favorites", 2 ] } } }
]);
```

**Salida**

```
[
  { name: 'Alvin', topTwoFavorites: [ 'chocolate', 'cake' ] },
  { name: 'Tom', topTwoFavorites: [ 'donuts', 'pudding' ] },
  { name: 'Jessica', topTwoFavorites: [ 'fudge', 'smores' ] },
  { name: 'Rachel', topTwoFavorites: [ 'ice cream' ] }
]
```

En este ejemplo, el `$slice` operador se utiliza para extraer los dos primeros elementos de la `favorites` matriz de cada documento.

## Ejemplos de código
<a name="slice-code"></a>

Para ver un ejemplo de código para usar el `$slice` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('sweets');

  const result = await collection.aggregate([
    { $project: { name: 1, topTwoFavorites: { $slice: ['$favorites', 2] } } }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['sweets']

    result = list(collection.aggregate([
        { '$project': { 'name': 1, 'topTwoFavorites': { '$slice': ['$favorites', 2] } } }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1size
<a name="size"></a>

El `$size` operador se usa para devolver el recuento de elementos dentro de un campo de matriz. Se puede utilizar para determinar el número de elementos de una matriz almacenada en un documento.

**Parámetros**
+ `field`: La ruta del campo cuyo tamaño de matriz desea devolver.

## Ejemplo (MongoDB Shell)
<a name="size-examples"></a>

En este ejemplo se muestra cómo usar el `$size` operador para devolver el recuento de equipos que sigue cada usuario.

**Cree documentos de muestra**

```
db.profiles.insertMany([
  { _id: 1, name: "John Doe", teams: ["Acme", "Widgets", "Gadgets"] },
  { _id: 2, name: "Jane Smith", teams: ["Acme", "Gadgets"] },
  { _id: 3, name: "Bob Johnson", teams: ["Acme", "Widgets", "Gadgets"] }
]);
```

**Ejemplo de consulta**

```
db.profiles.aggregate([
  {
    $project: {
      _id: 0,
      name: 1,
      "numberOfTeams": { $size: "$teams" }
    }
  }
])
```

**Salida**

```
[
  { name: 'John Doe', numberOfTeams: 3 },
  { name: 'Jane Smith', numberOfTeams: 2 },
  { name: 'Bob Johnson', numberOfTeams: 3 }
]
```

## Ejemplos de código
<a name="size-code"></a>

Para ver un ejemplo de código para usar el `$size` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const profiles = db.collection('profiles');

  const result = await profiles.aggregate([
    {
      $project: {
        item: 1,
        "numberOfTeams": { $size: "$teams" }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def main():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    profiles = db.profiles

    result = list(profiles.aggregate([
        {
            '$project': {
                'item': 1,
                'numberOfTeams': { '$size': '$teams' }
            }
        }
    ]))

    print(result)
    client.close()

if __name__ == "__main__":
    main()
```

------

# \$1sort
<a name="sort"></a>

La etapa de `$sort` agregación ordena los documentos de la canalización en función de los valores de campo especificados. Los documentos se organizan en orden ascendente o descendente según los criterios de clasificación proporcionados.

**Parámetros**
+ `field`: el nombre del campo por el que se va a ordenar.
+ `order`: Se utiliza `1` en orden ascendente o `-1` descendente.

## Ejemplo (MongoDB Shell)
<a name="sort-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$sort` escenario para ordenar los productos por precio en orden descendente.

**Cree documentos de muestra**

```
db.products.insertMany([
  { _id: 1, name: "Laptop", category: "Electronics", price: 1200 },
  { _id: 2, name: "Mouse", category: "Electronics", price: 25 },
  { _id: 3, name: "Desk", category: "Furniture", price: 350 },
  { _id: 4, name: "Chair", category: "Furniture", price: 150 },
  { _id: 5, name: "Monitor", category: "Electronics", price: 400 }
]);
```

**Ejemplo de consulta**

```
db.products.aggregate([
  { $sort: { price: -1 } }
]);
```

**Salida**

```
[
  { _id: 1, name: 'Laptop', category: 'Electronics', price: 1200 },
  { _id: 5, name: 'Monitor', category: 'Electronics', price: 400 },
  { _id: 3, name: 'Desk', category: 'Furniture', price: 350 },
  { _id: 4, name: 'Chair', category: 'Furniture', price: 150 },
  { _id: 2, name: 'Mouse', category: 'Electronics', price: 25 }
]
```

## Ejemplos de código
<a name="sort-code"></a>

Para ver un ejemplo de código para usar la etapa de `$sort` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('products');

  const result = await collection.aggregate([
    { $sort: { price: -1 } }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['products']

    result = list(collection.aggregate([
        { '$sort': { 'price': -1 } }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1split
<a name="split"></a>

El operador de `$split` agregación de Amazon DocumentDB se utiliza para dividir una cadena en una matriz de subcadenas en función de un delimitador específico. Esto puede resultar útil para analizar campos de cadenas complejos y extraer componentes individuales para su posterior procesamiento.

**Parámetros**
+ `string`: La cadena que se va a dividir.
+ `delimiter`: El carácter o la cadena utilizados para dividir la cadena de entrada.

## Ejemplo (MongoDB Shell)
<a name="split-examples"></a>

En este ejemplo, solemos `$split` separar los componentes de un campo «Escritorio» en una matriz, lo que facilita el procesamiento de los datos.

**Crea documentos de muestra**

```
db.people.insertMany([
  { "_id": 1, "Desk": "Düsseldorf-BVV-021" },
  { "_id": 2, "Desk": "Munich-HGG-32a" },
  { "_id": 3, "Desk": "Cologne-ayu-892.50" },
  { "_id": 4, "Desk": "Dortmund-Hop-78" }
]);
```

**Ejemplo de consulta**

```
db.people.aggregate([
  { $project: { parts: { $split: ["$Desk", "-"] } } }
]);
```

**Salida**

```
{ "_id" : 1, "parts" : [ "Düsseldorf", "BVV", "021" ] }
{ "_id" : 2, "parts" : [ "Munich", "HGG", "32a" ] }
{ "_id" : 3, "parts" : [ "Cologne", "ayu", "892.50" ] }
{ "_id" : 4, "parts" : [ "Dortmund", "Hop", "78" ] }
```

El resultado de `$split` crea una matriz que se puede utilizar en la aplicación para mostrar la información a los empleados.

## Ejemplos de código
<a name="split-code"></a>

Para ver un ejemplo de código para usar el `$split` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const result = await db.collection('people').aggregate([
    { $project: { parts: { $split: ['$Desk', '-'] } } }
  ]).toArray();
  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    result = list(db.people.aggregate([
        { '$project': { 'parts': { '$split': ['$Desk', '-'] } } }
    ]))
    print(result)
    client.close()

example()
```

------

# \$1sqrt
<a name="sqrt"></a>

Nuevo a partir de la versión 4.0.

El `$sqrt` operador de Amazon DocumentDB se utiliza para calcular la raíz cuadrada de un número.

**Parámetros**
+ `expression`: El argumento puede ser cualquier expresión válida siempre que se resuelva en un número no negativo.

## Ejemplo (MongoDB Shell)
<a name="sqrt-examples"></a>

El siguiente ejemplo demuestra el uso del `$sqrt` operador para calcular la raíz cuadrada de un número.

**Cree documentos de muestra**

```
db.numbers.insertMany([
  { "_id": 1, "number": 16 },
  { "_id": 2, "number": 36 },
  { "_id": 3, "number": 64 }
]);
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  { $project: {
    "_id": 1,
    "square_root": { $sqrt: "$number" }
  }}
]);
```

**Salida**

```
[
  { _id: 1, square_root: 4 },
  { _id: 2, square_root: 6 },
  { _id: 3, square_root: 8 }
]
```

## Ejemplos de código
<a name="sqrt-code"></a>

Para ver un ejemplo de código para usar el `$sqrt` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

  try {
      await client.connect();

      const db = client.db('test');
      const collection = db.collection('numbers');

      const pipeline = [
        {
          $project: {
            _id: 1,
            square_root: { $sqrt: '$number' }
          }
        }
      ];

      const results = await collection.aggregate(pipeline).toArray();

      console.dir(results, { depth: null });

    } finally {
      await client.close();
    }
}

example().catch(console.error);
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
  
  client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

  try:
      db = client.test
      collection = db.numbers

      pipeline = [
          {
              "$project": {
                  "_id": 1,
                  "square_root": { 
                    "$sqrt": "$number" 
                  }
              }
          }
      ]

      results = collection.aggregate(pipeline)

      for doc in results:
          print(doc)

  except Exception as e:
      print(f"An error occurred: {e}")

  finally:
      client.close()

example()
```

------

# \$1strLenBytes
<a name="strLenBytes"></a>

El `$strLenBytes` operador de Amazon DocumentDB se utiliza para determinar la longitud de una cadena en bytes. Esto resulta útil cuando necesita comprender el tamaño de almacenamiento de un campo de cadena, especialmente cuando se trata de caracteres Unicode que pueden utilizar más de un byte por carácter.

**Parámetros**
+ `expression`: la expresión de cadena cuya longitud se calcula.

## Ejemplo (MongoDB Shell)
<a name="strLenBytes-examples"></a>

En este ejemplo se muestra cómo utilizar el `$strLenBytes` operador para calcular la longitud de los campos de cadena en bytes.

**Cree documentos de muestra**

```
db.people.insertMany([
  { "_id": 1, "Desk": "Düsseldorf-BVV-021" },
  { "_id": 2, "Desk": "Munich-HGG-32a" },
  { "_id": 3, "Desk": "Cologne-ayu-892.50" },
  { "_id": 4, "Desk": "Dortmund-Hop-78" }
]);
```

**Ejemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      "Desk": 1,
      "length": { $strLenBytes: "$Desk" }
    }
  }
])
```

**Salida**

```
{ "_id" : 1, "Desk" : "Düsseldorf-BVV-021", "length" : 19 }
{ "_id" : 2, "Desk" : "Munich-HGG-32a", "length" : 14 }
{ "_id" : 3, "Desk" : "Cologne-ayu-892.50", "length" : 18 }
{ "_id" : 4, "Desk" : "Dortmund-Hop-78", "length" : 15 }
```

Tenga en cuenta que la longitud de la cadena «Düsseldorf-BVV-021" es de 19 bytes, que es diferente del número de puntos de código (18) debido a que el carácter Unicode «Ü» ocupa 2 bytes.

## Ejemplos de código
<a name="strLenBytes-code"></a>

Para ver un ejemplo de código para usar el `$strLenBytes` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('people');

  const result = await collection.aggregate([
    {
      $project: {
        "Desk": 1,
        "length": { $strLenBytes: "$Desk" }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.people

    result = list(collection.aggregate([
        {
            '$project': {
                "Desk": 1,
                "length": { "$strLenBytes": "$Desk" }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1strLenCP
<a name="strLenCP"></a>

El `$strLenCP` operador de Amazon DocumentDB se utiliza para determinar la longitud de una expresión de cadena en puntos de código (caracteres Unicode). Esto resulta útil cuando necesita saber el número de caracteres de una cadena, en lugar del número de bytes.

**Parámetros**
+ `expression`: la expresión de cadena cuya longitud se debe devolver en puntos de código.

## Ejemplo (MongoDB Shell)
<a name="strLenCP-examples"></a>

El siguiente ejemplo demuestra el uso del `$strLenCP` operador para determinar la longitud de las cadenas con caracteres Unicode.

**Cree documentos de muestra**

```
db.people.insertMany([
  { "_id": 1, "Desk": "Düsseldorf-BVV-021" },
  { "_id": 2, "Desk": "Munich-HGG-32a" },
  { "_id": 3, "Desk": "Cologne-ayu-892.50" },
  { "_id": 4, "Desk": "Dortmund-Hop-78" }
])
```

**Ejemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      "Desk": 1,
      "length": { $strLenCP: "$Desk" }
    }
  }
])
```

**Salida**

```
{ "_id" : 1, "Desk" : "Düsseldorf-BVV-021", "length" : 18 }
{ "_id" : 2, "Desk" : "Munich-HGG-32a", "length" : 14 }
{ "_id" : 3, "Desk" : "Cologne-ayu-892.50", "length" : 18 }
{ "_id" : 4, "Desk" : "Dortmund-Hop-78", "length" : 15 }
```

Observe la diferencia en la medida de longitud de la cadena «Düsseldorf-BVV-021", que contiene un carácter Unicode (Ü). El `$strLenCP` operador cuenta correctamente el número de caracteres Unicode, mientras que el operador cuenta el número de bytes. `$strLenBytes`

## Ejemplos de código
<a name="strLenCP-code"></a>

Para ver un ejemplo de código para usar el `$strLenCP` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

A continuación, se muestra un ejemplo del uso del `$strLenCP` operador en una aplicación Node.js con el controlador MongoDB:

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('people');

  const result = await collection.aggregate([
    {
      $project: {
        "Desk": 1,
        "length": { $strLenCP: "$Desk" }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

Este es un ejemplo del uso del `$strLenCP` operador en una aplicación de Python con el PyMongo controlador:

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.people

    result = list(collection.aggregate([
        {
            '$project': {
                "Desk": 1,
                "length": { "$strLenCP": "$Desk" }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1strcasecmp
<a name="strcasecmp"></a>

El `$strcasecmp` operador de Amazon DocumentDB realiza una comparación entre dos cadenas que no distingue mayúsculas de minúsculas. Devuelve un valor entero que indica la comparación lexicográfica de las dos cadenas de entrada, ignorando las diferencias entre mayúsculas y minúsculas.

**Parámetros**
+ `string1`: La primera cadena que se va a comparar.
+ `string2`: La segunda cadena que se va a comparar.

## Ejemplo (MongoDB Shell)
<a name="strcasecmp-examples"></a>

En este ejemplo se muestra cómo utilizar el `$strcasecmp` operador para comparar las cadenas de ubicación de los escritorios de una `people` colección, ignorando las diferencias entre mayúsculas y minúsculas.

**Cree documentos de muestra**

```
db.people.insertMany([
  { "_id": 1, "Desk": "mke233-wi" },
  { "_id": 2, "Desk": "MKE233-WI" },
  { "_id": 3, "Desk": "mke233-wi" }
]);
```

**Ejemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      item: 1,
      compare: { $strcasecmp: ["$Desk", "mke233-wi"] }
    }
  }
]);
```

**Salida**

```
{ "_id" : 1, "compare" : 0 }
{ "_id" : 2, "compare" : 0 }
{ "_id" : 3, "compare" : 0 }
```

El resultado muestra que la comparación entre el `&quot;Desk&quot;` campo y la cadena se `&quot;mke233-wi&quot;` devuelve `0` para los tres documentos, lo que indica que las cadenas son iguales si se omiten las mayúsculas y minúsculas.

## Ejemplos de código
<a name="strcasecmp-code"></a>

Para ver un ejemplo de código para usar el `$strcasecmp` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('people');

  const result = await collection.aggregate([
    {
      $project: {
        item: 1,
        compare: { $strcasecmp: ["$Desk", "mke233-wi"] }
      }
    }
  ]).toArray();

  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.people

    result = list(collection.aggregate([
        {
            '$project': {
                'item': 1,
                'compare': { '$strcasecmp': ['$Desk', 'mke233-wi'] }
            }
        }
    ]))

    print(result)

    client.close()

example()
```

------

# \$1substr
<a name="substr"></a>

El `$substr` operador de Amazon DocumentDB se utiliza para extraer una subcadena de una cadena determinada. Resulta especialmente útil cuando necesita definir subcadenas en función de un rango de caracteres, en lugar de un rango de bytes. Esto es especialmente importante cuando se trata de cadenas Unicode, donde el número de bytes utilizados para representar un carácter puede variar.

**Parámetros**
+ `string`: la cadena de entrada de la que se extrae la subcadena.
+ `start`: la posición inicial (basada en cero) de la subcadena que se va a extraer. Puede ser una expresión entera no negativa.
+ `length`: el número de caracteres de la subcadena extraída. Puede ser una expresión entera no negativa.

## Ejemplo (MongoDB Shell)
<a name="substr-examples"></a>

En este ejemplo, demostraremos el uso de `$substr` para extraer la abreviatura de estado de la ubicación del escritorio de un empleado.

**Cree documentos de muestra**

```
db.people.insertMany([
  { "_id": 1, "Desk": "Düsseldorf-NRW-021" },
  { "_id": 2, "Desk": "Bremerhaven-HBB-32a" },
  { "_id": 3, "Desk": "Norderstedt-SHH-892.50" },
  { "_id": 4, "Desk": "Brandenburg-BBB-78" }
]);
```

**Ejemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      "state": { $substr: ["$Desk", 12, 3] }
    }
  }
])
```

**Salida**

```
{ "_id": 1, "state": "NRW" },
{ "_id": 2, "state": "HBB" },
{ "_id": 3, "state": "SHH" },
{ "_id": 4, "state": "BBB" }
```

## Ejemplos de código
<a name="substr-code"></a>

Para ver un ejemplo de código para usar el `$substr` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require("mongodb");

async function example() {
  const client = await MongoClient.connect("mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false");
  const db = client.db("test");
  const collection = db.collection("people");

  const result = await collection.aggregate([
    {
      $project: {
        "state": { $substrCP: ["$Desk", 12, 3] }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient("mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false")
    db = client["test"]
    collection = db["people"]

    result = list(collection.aggregate([
        {
            "$project": {
                "state": { "$substrCP": ["$Desk", 12, 3] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1substrBytes
<a name="substrBytes"></a>

El `$substrBytes` operador de Amazon DocumentDB se utiliza para extraer una subcadena de una cadena en función de un rango de bytes especificado. Este operador resulta útil cuando necesita extraer una subcadena de una cadena y el número de bytes necesario para representar cada carácter de la cadena es importante.

A diferencia `$substrCP` de lo que ocurre con el número de puntos de código Unicode, `$substrBytes` funciona con el número de bytes necesarios para representar los caracteres de la cadena. Esto puede resultar especialmente útil cuando se trabaja con cadenas que contienen caracteres que no son ASCII, ya que es posible que se necesite más de un byte para representarlos.

\$1Nota: \$1 `$substr` ha quedado obsoleto desde la versión 3.4. `$substr`ahora es un alias de. `$substrBytes`

**Parámetros**
+ `string`: La cadena de entrada de la que se extraerá la subcadena.
+ `startByte`: la posición del byte inicial basada en cero de la subcadena que se va a extraer. Se puede usar un valor negativo para especificar una posición desde el final de la cadena.
+ `length`: el número de bytes de la subcadena que se va a extraer.

## Ejemplo (MongoDB Shell)
<a name="substrBytes-examples"></a>

En este ejemplo, utilizaremos `$substrBytes` para extraer una subcadena de una cadena que contiene caracteres que no son ASCII.

**Crea documentos de muestra**

```
db.people.insertMany([
  { "_id": 1, "Desk": "Düsseldorf-NRW-021" },
  { "_id": 2, "Desk": "Bremerhaven-HBB-32a" },
  { "_id": 3, "Desk": "Norderstedt-SHH-892.50" },
  { "_id": 4, "Desk": "Brandenburg-BBB-78" }
]);
```

**Ejemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      "state": { $substrBytes: [ "$Desk", 12, 3] }
    }
  }
])
```

**Salida**

```
{ "_id": 1, "state": "NRW" },
{ "_id": 2, "state": "HBB" },
{ "_id": 3, "state": "SHH" },
{ "_id": 4, "state": "BBB" }
```

En este ejemplo, solemos `$substrBytes` extraer una subcadena de 3 bytes a partir del byte 12 del `Desk` campo. Esto nos permite extraer la abreviatura de estado de 2 caracteres, aunque la cadena pueda contener caracteres que no son ASCII.

## Ejemplos de código
<a name="substrBytes-code"></a>

Para ver un ejemplo de código para usar el `$substrBytes` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const people = db.collection('people');

  const result = await people.aggregate([
    {
      $project: {
        "state": { $substrBytes: ["$Desk", 12, 3] }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    people = db.people

    result = list(people.aggregate([
        {
            '$project': {
                "state": { '$substrBytes': ["$Desk", 12, 3] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1substrCP
<a name="substrCP"></a>

El `$substrCP` operador de Amazon DocumentDB se utiliza para extraer una subcadena de una cadena, donde la subcadena se especifica como un rango de puntos de código (CP) UTF-8. Este operador resulta especialmente útil cuando se trabaja con cadenas Unicode, ya que permite extraer subcadenas sin tener que preocuparse por la representación en bytes subyacente de los caracteres.

A diferencia del `$substrBytes` operador, que opera en posiciones de bytes, el `$substrCP` operador trabaja con posiciones de puntos de código. Esto facilita el trabajo con cadenas que contienen caracteres que no son ASCII, ya que es posible que el número de puntos de código no coincida con el número de bytes o caracteres.

**Parámetros**
+ `string`: la cadena de entrada de la que se extrae la subcadena.
+ `start`: la posición del punto de código inicial (de base cero) desde la que se extrae la subcadena.
+ `length`: el número de puntos de código que se van a extraer.

## Ejemplo (MongoDB Shell)
<a name="substrCP-examples"></a>

En este ejemplo, utilizaremos el `$substrCP` operador para extraer la abreviatura de estado de una cadena que contiene la ubicación del escritorio del empleado.

**Crea documentos de muestra**

```
db.people.insert([
  { "_id": 1, "first_name": "Jane", "last_name": "Doe", "Desk": "12 Main St, Minneapolis, MN 55401" },
  { "_id": 2, "first_name": "John", "last_name": "Doe", "Desk": "456 Oak Rd, New Orleans, LA 70032" },
  { "_id": 3, "first_name": "Steve", "last_name": "Smith", "Desk": "789 Elm Ln, Bakersfield, CA 93263" }
]);
```

**Ejemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      "state": { $substrCP: ["$Desk", 25, 2] }
    }
  }
]);
```

**Salida**

```
{ "_id" : 1, "state" : "MN" }
{ "_id" : 2, "state" : "LA" }
{ "_id" : 3, "state" : "CA" }
```

En este ejemplo, sabemos que la abreviatura del estado comienza en el punto de código número 25 del `Desk` campo y tiene una longitud de 2 puntos de código. Al usar el `$substrCP` operador, podemos extraer la abreviatura del estado sin tener que preocuparnos por la representación en bytes subyacente de la cadena.

## Ejemplos de código
<a name="substrCP-code"></a>

Para ver un ejemplo de código para usar el `$substrCP` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findStates() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const result = await db.collection('people').aggregate([
    {
      $project: {
        "state": { $substrCP: ["$Desk", 25, 2] }
      }
    }
  ]).toArray();
  console.log(result);
  client.close();
}

findStates();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_states():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    result = list(db.people.aggregate([
        {
            '$project': {
                'state': { '$substrCP': ['$Desk', 25, 2] }
            }
        }
    ]))
    print(result)
    client.close()

find_states()
```

Tanto en el ejemplo de Node.js como en el de Python, utilizamos el `$substrCP` operador para extraer la abreviatura de estado del `Desk` campo, de forma similar al ejemplo de MongoDB Shell.

------

# \$1subtract
<a name="subtract"></a>

El `$subtract` operador de Amazon DocumentDB se utiliza para restar valores. Se puede usar para restar fechas, números o una combinación de ambos. Este operador es útil para calcular la diferencia entre dos fechas o restar un valor de un número.

**Parámetros**
+ `expression1`: El primer valor que se va a restar.
+ `expression2`: El segundo valor del que se va a restar. `<expression1>`

## Ejemplo (MongoDB Shell)
<a name="subtract-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$subtract` operador para calcular la diferencia entre dos fechas.

**Cree un documento de muestra**

```
db.dates.insert([
  {
  "_id": 1,
  "startDate": ISODate("2023-01-01T00:00:00Z"),
  "endDate": ISODate("2023-01-05T12:00:00Z")
  }
]);
```

**Ejemplo de consulta**

```
db.dates.aggregate([
  {
    $project: {
      _id: 1,
      durationDays: {
        $divide: [
          { $subtract: ["$endDate", "$startDate"] },
          1000 * 60 * 60 * 24  // milliseconds in a day
        ]
      }
    }
  }
]);
```

**Salida**

```
[ { _id: 1, durationDays: 4.5 } ]
```

En este ejemplo, el `$subtract` operador se utiliza para calcular la diferencia entre `$endDate` y `$startDate` en días.

## Ejemplos de código
<a name="subtract-code"></a>

Para ver un ejemplo de código para usar el `$subtract` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');

  try {
    await client.connect();
    const db = client.db('test');
    const collection = db.collection('dates');

    const pipeline = [
      {
        $project: {
          _id: 1,
          durationDays: {
            $divide: [
              { $subtract: ["$endDate", "$startDate"] },
              1000 * 60 * 60 * 24  // Convert milliseconds to days
            ]
          }
        }
      }
    ];

    const results = await collection.aggregate(pipeline).toArray();

    console.dir(results, { depth: null });

  } finally {
    await client.close();
  }
}

example().catch(console.error);
```

------
#### [ Python ]

```
from datetime import datetime, timedelta
from pymongo import MongoClient

def example():
  
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

    try:
        db = client.test
        collection = db.dates

        pipeline = [
            {
                "$project": {
                    "_id": 1,
                    "durationDays": {
                        "$divide": [
                            { "$subtract": ["$endDate", "$startDate"] },
                            1000 * 60 * 60 * 24  # Convert milliseconds to days
                        ]
                    }
                }
            }
        ]

        results = collection.aggregate(pipeline)

        for doc in results:
            print(doc)

    except Exception as e:
        print(f"An error occurred: {e}")

    finally:
        client.close()

example()
```

------

# \$1sum
<a name="sum"></a>

El `$sum` operador de Amazon DocumentDB devuelve la suma de la expresión especificada para cada documento de un grupo. Es un operador acumulador de grupos que se utiliza normalmente en la fase \$1group de una canalización de agregación para realizar cálculos de suma.

**Parámetros**
+ `expression`: la expresión numérica que se va a sumar. Puede ser una ruta de campo, una expresión o una constante.

## Ejemplo (MongoDB Shell)
<a name="sum-examples"></a>

El siguiente ejemplo demuestra el uso del `$sum` operador para calcular las ventas totales de cada producto.

**Cree documentos de muestra**

```
db.sales.insertMany([
  { product: "abc", price: 10, quantity: 2 },
  { product: "abc", price: 10, quantity: 3 },
  { product: "xyz", price: 20, quantity: 1 },
  { product: "xyz", price: 20, quantity: 5 }
]);
```

**Ejemplo de consulta**

```
db.sales.aggregate([
  { $group: {
      _id: "$product",
      totalSales: { $sum: { $multiply: [ "$price", "$quantity" ] } }
    }}
]);
```

**Salida**

```
[
  { "_id": "abc", "totalSales": 50 },
  { "_id": "xyz", "totalSales": 120 }
]
```

## Ejemplos de código
<a name="sum-code"></a>

Para ver un ejemplo de código para usar el `$sum` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const uri = 'mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false';
  const client = new MongoClient(uri);

  try {
    await client.connect();

    const db = client.db('test');
    const collection = db.collection('sales');

    const result = await collection.aggregate([
      { $group: {
          _id: "$product",
          totalSales: { $sum: { $multiply: [ "$price", "$quantity" ] } }
        }}
    ]).toArray();

    console.log(result);

  } catch (error) {
    console.error('Error:', error);
  } finally {
    await client.close();
  }
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient
from pprint import pprint

def example():
    client = None
    try:
        client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

        db = client.test
        collection = db.sales

        result = list(collection.aggregate([
            { '$group': {
                '_id': '$product',
                'totalSales': { '$sum': { '$multiply': [ '$price', '$quantity' ] } }
            }}
        ]))

        pprint(result)

    except Exception as e:
        print(f"An error occurred: {e}")

    finally:
        if client:
            client.close()

example()
```

------

# \$1switch
<a name="switch"></a>

Nuevo desde la versión 4.0.

No es compatible con el clúster de Elastic.

El `$switch` operador es un operador de expresión condicional de Amazon DocumentDB que le permite evaluar una lista de expresiones de mayúsculas y minúsculas y devolver el valor del primer caso que se evalúe como verdadero o un valor predeterminado si ninguna expresión de mayúsculas y minúsculas es verdadera.

**Parámetros**
+ `branches`: matriz de documentos, cada uno de los cuales tiene un campo de mayúsculas y minúsculas que contiene la expresión booleana que se va a evaluar y un campo que contiene el valor que se debe devolver si la expresión de mayúsculas y minúsculas es verdadera.
+ `default`: (opcional) El valor que se devolverá si ninguna de las expresiones entre mayúsculas y minúsculas es verdadera.

## Ejemplo (MongoDB Shell)
<a name="switch-examples"></a>

El siguiente ejemplo demuestra el uso del `$switch` operador para determinar el coste de envío de un pedido en función del total del pedido.

**Cree documentos de muestra**

```
db.orders.insertMany([
  { _id: 1, total: 50 },
  { _id: 2, total: 150 },
  { _id: 3, total: 250 }
]);
```

**Ejemplo de consulta**

```
db.orders.aggregate([
  {
    $project: {
      _id: 1,
      total: 1,
      shippingCost: {
        $switch: {
          branches: [
            { case: { $lte: ["$total", 100] }, then: 5 },
            { case: { $lte: ["$total", 200] }, then: 10 },
            { case: { $gt: ["$total", 200] }, then: 15 }
          ],
          default: 0
        }
      }
    }
  }
])
```

**Salida**

```
[
  {
    "_id": 1,
    "total": 50,
    "shippingCost": 5
  },
  {
    "_id": 2,
    "total": 150,
    "shippingCost": 10
  },
  {
    "_id": 3,
    "total": 250,
    "shippingCost": 15
  }
]
```

## Ejemplos de código
<a name="switch-code"></a>

Para ver un ejemplo de código para usar el `$switch` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('orders');

  const result = await collection.aggregate([
    {
      $project: {
        _id: 1,
        total: 1,
        shippingCost: {
          $switch: {
            branches: [
              { case: { $lte: ['$total', 100] }, then: 5 },
              { case: { $lte: ['$total', 200] }, then: 10 },
              { case: { $gt: ['$total', 200] }, then: 15 }
            ],
            default: 0
          }
        }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def main():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.orders

    result = list(collection.aggregate([
        {
            '$project': {
                '_id': 1,
                'total': 1,
                'shippingCost': {
                    '$switch': {
                        'branches': [
                            { 'case': { '$lte': ['$total', 100] }, 'then': 5 },
                            { 'case': { '$lte': ['$total', 200] }, 'then': 10 },
                            { 'case': { '$gt': ['$total', 200] }, 'then': 15 }
                        ],
                        'default': 0
                    }
                }
            }
        }
    ]))

    print(result)
    client.close()

if __name__ == '__main__':
    main()
```

------

# \$1 a Bool
<a name="toBool"></a>

El `$toBool` operador de Amazon DocumentDB convierte una expresión en un valor booleano.

**Parámetros**
+ `expression`: la expresión que se va a convertir en un valor booleano.

**Nota**: Cualquier cadena se convierte en. `true`

## Ejemplo (MongoDB Shell)
<a name="toBool-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$toBool` operador para normalizar los valores de estado del dispositivo a partir de distintos tipos de datos.

**Cree documentos de muestra**

```
db.deviceStates.insertMany([
  { _id: 1, deviceId: "sensor-001", status: true },
  { _id: 2, deviceId: "camera-002", status: 1 },
  { _id: 3, deviceId: "thermostat-003", status: "active" },
  { _id: 4, deviceId: "doorlock-004", status: 0 }
]);
```

**Ejemplo de consulta**

```
db.deviceStates.aggregate([
  {
    $project: {
      _id: 1,
      deviceId: 1,
      isActive: { $toBool: "$status" }
    }
  }
]);
```

**Salida**

```
[
  { "_id": 1, "deviceId": "sensor-001", "isActive": true },
  { "_id": 2, "deviceId": "camera-002", "isActive": true },
  { "_id": 3, "deviceId": "thermostat-003", "isActive": true },
  { "_id": 4, "deviceId": "doorlock-004", "isActive": false }
]
```

## Ejemplos de código
<a name="toBool-code"></a>

Para ver un ejemplo de código para usar el `$toBool` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('deviceStates');

  const result = await collection.aggregate([
    {
      $project: {
        _id: 1,
        deviceId: 1,
        isActive: { $toBool: '$status' }
      }
    }
  ]).toArray();

  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def main():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['deviceStates']

    result = list(collection.aggregate([
        {
            '$project': {
                '_id': 1,
                'deviceId': 1,
                'isActive': { '$toBool': '$status' }
            }
        }
    ]))

    print(result)

    client.close()

if __name__ == '__main__':
    main()
```

------

# \$1toDate
<a name="toDate"></a>

Novedades de la versión 4.0

El operador de `$toDate` agregación de Amazon DocumentDB se utiliza para convertir una cadena de fecha o fecha y hora en un tipo de fecha BSON. Es la operación inversa del operador. `$dateToString`

**Parámetros**
+ `dateString`: una representación en cadena de una fecha o fecha y hora que se va a convertir a un tipo de fecha BSON.
+ `format`: (opcional) Una cadena que especifica el formato de. `dateString` Si no se proporciona, el operador intentará analizarlos `dateString` en varios formatos de fecha y hora estándar.
+ `timezone`: (opcional) Una cadena que representa la zona horaria que se utilizará para la conversión. Si no se proporciona, se utiliza la zona horaria local.

## Ejemplo (MongoDB Shell)
<a name="toDate-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$toDate` operador para convertir una cadena de fecha en un tipo de fecha BSON.

**Cree documentos de muestra**

```
db.events.insertMany([
  { _id: 1, eventName: "Mission Start", eventTime: "2023-04-15T10:30:00Z" },
  { _id: 2, eventName: "Checkpoint Reached", eventTime: "2023-04-15T11:15:00Z" },
  { _id: 3, eventName: "Mission End", eventTime: "2023-04-15T12:00:00Z" }
]);
```

**Ejemplo de consulta**

```
db.events.aggregate([
  {
    $project: {
      eventName: 1,
      eventTimeDate: { $toDate: "$eventTime" }
    }
  }
]);
```

**Salida**

```
[
  {
    "_id": 1,
    "eventName": "Mission Start",
    "eventTimeDate": ISODate("2023-04-15T10:30:00Z")
  },
  {
    "_id": 2,
    "eventName": "Checkpoint Reached",
    "eventTimeDate": ISODate("2023-04-15T11:15:00Z")
  },
  {
    "_id": 3,
    "eventName": "Mission End",
    "eventTimeDate": ISODate("2023-04-15T12:00:00Z")
  }
]
```

## Ejemplos de código
<a name="toDate-code"></a>

Para ver un ejemplo de código para usar el `$toDate` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('events');

  const result = await collection.aggregate([
    {
      $project: {
        eventName: 1,
        eventTimeDate: { $toDate: '$eventTime' }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['events']

    result = list(collection.aggregate([
        {
            '$project': {
                'eventName': 1,
                'eventTimeDate': { '$toDate': '$eventTime' }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1 a Decimal
<a name="toDecimal"></a>

Novedades de la versión 4.0

El `$toDecimal` operador de Amazon DocumentDB se utiliza para convertir un valor al tipo de datos Decimal128. Esto resulta útil cuando necesita realizar operaciones aritméticas decimales precisas o manejar valores decimales grandes que no se pueden representar con precisión con el tipo de datos Double.

**Parámetros**
+ `expression`: la expresión que se va a convertir al tipo de datos Decimal128.

## Ejemplo (MongoDB Shell)
<a name="toDecimal-examples"></a>

En este ejemplo se muestra cómo utilizar el `$toDecimal` operador para convertir un valor de cadena en un tipo de datos Decimal128.

**Cree documentos de muestra**

```
db.numbers.insertOne({ _id: 1, value: "3.14" });
db.numbers.insertOne({ _id: 2, value: "2.71" });
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  { $project: {
    _id: 1,
    decimalValue: { $toDecimal: "$value" }
  }}
])
```

**Salida**

```
[
  { "_id" : 1, "decimalValue" : Decimal128("3.14") },
  { "_id" : 2, "decimalValue" : Decimal128("2.71") }
]
```

## Ejemplos de código
<a name="toDecimal-code"></a>

Para ver un ejemplo de código para usar el `$toDecimal` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('numbers');

  const result = await collection.aggregate([
    { $project: {
      _id: 1,
      decimalValue: { $toDecimal: "$value" }
    }}
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.numbers

    result = list(collection.aggregate([
        {'$project': {
            '_id': 1,
            'decimalValue': {'$toDecimal': '$value'}
        }}
    ]))

    print(result)
    client.close()

example()
```

------

# \$1 a doble
<a name="toDouble"></a>

Novedades de la versión 4.0

El `$toDouble` operador de Amazon DocumentDB se utiliza para convertir un valor en un número de punto flotante de 64 bits de doble precisión. Esto puede resultar útil cuando necesite realizar operaciones aritméticas con valores que originalmente no tenían un formato numérico.

**Parámetros**

`&lt;expression&gt;`: la expresión que se va a convertir en un valor doble. Puede ser cualquier expresión válida que se resuelva en un valor numérico, de cadena o booleano.

## Ejemplo (MongoDB Shell)
<a name="toDouble-examples"></a>

En este ejemplo se muestra cómo utilizar el `$toDouble` operador para convertir un valor de cadena en un valor numérico con el fin de realizar un cálculo matemático.

**Cree documentos de muestra**

```
db.numbers.insertMany([
  { _id: 1, value: "10.5" },
  { _id: 2, value: "20.25" },
  { _id: 3, value: "7" }
])
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  {
    $project: {
      _id: 1,
      value: 1,
      double_value: { $toDouble: "$value" },
      double_plus_five: { $add: [{ $toDouble: "$value" }, 5] }
    }
  }
])
```

**Salida**

```
[
  { "_id" : 1, "value" : "10.5", "double_value" : 10.5, "double_plus_five" : 15.5 },
  { "_id" : 2, "value" : "20.25", "double_value" : 20.25, "double_plus_five" : 25.25 },
  { "_id" : 3, "value" : "7", "double_value" : 7.0, "double_plus_five" : 12.0 }
]
```

## Ejemplos de código
<a name="toDouble-code"></a>

Para ver un ejemplo de código para usar el `$toDouble` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('numbers');

  const result = await collection.aggregate([
    {
      $project: {
        _id: 1,
        value: 1,
        double_value: { $toDouble: "$value" },
        double_plus_five: { $add: [{ $toDouble: "$value" }, 5] }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['numbers']

    result = list(collection.aggregate([
        {
            '$project': {
                '_id': 1,
                'value': 1,
                'double_value': { '$toDouble': '$value' },
                'double_plus_five': { '$add': [{ '$toDouble': '$value' }, 5] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1toInt
<a name="toInt"></a>

Novedades de la versión 4.0

El `$toInt` operador de Amazon DocumentDB se utiliza para convertir un valor de entrada en un tipo de datos entero. Este operador resulta útil cuando necesita asegurarse de que un campo o expresión se representa como un número entero, lo que puede ser importante para determinadas operaciones o tareas de procesamiento de datos.

**Parámetros**
+ `expression`: la expresión que se va a convertir en un número entero.

## Ejemplo (MongoDB Shell)
<a name="toInt-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$toInt` operador para convertir un valor de cadena en un entero.

**Cree documentos de muestra**

```
db.numbers.insertMany([
  { "name": "one", "value": "1" },
  { "name": "hundred", "value": "100" }
]);
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  { $project: {
    "_id": 0,
    "name": 1,
    "intValue": { $toInt: "$value" }
  }}
]);
```

**Salida**

```
{ "name": "one", "intValue": 1 }
{ "name": "hundred", "intValue": 100 }
```

## Ejemplos de código
<a name="toInt-code"></a>

Para ver un ejemplo de código para usar el `$toInt` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('numbers');

  const result = await collection.aggregate([
    { $project: {
      "_id": 0,
      "name": 1,
      "intValue": { $toInt: "$value" }
    }}
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['numbers']

    result = list(collection.aggregate([
        { "$project": {
            "_id": 0,
            "name": 1,
            "intValue": { "$toInt": "$value" }
        }}
    ]))

    print(result)
    client.close()

example()
```

------

# \$1 a Long
<a name="toLong"></a>

Novedades de la versión 4.0

El `$toLong` operador de Amazon DocumentDB se utiliza para convertir un valor en un tipo de datos entero (largo) de 64 bits. Esto puede resultar útil cuando necesite realizar operaciones aritméticas o comparaciones con valores numéricos que pueden almacenarse como cadenas u otros tipos de datos.

**Parámetros**
+ `expression`: la expresión que se va a convertir en un entero de 64 bits.

## Ejemplo (MongoDB Shell)
<a name="toLong-examples"></a>

En este ejemplo se muestra cómo utilizar el `$toLong` operador para convertir un valor de cadena en un entero de 64 bits.

**Cree documentos de muestra**

```
db.numbers.insertMany([
  { _id: 1, value: "42" },
  { _id: 3, value: "9223372036854775807" }
]);
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  {
    $project: {
      _id: 1,
      longValue: { $toLong: "$value" }
    }
  }
])
```

**Salida**

```
[
  { "_id" : 1, "longValue" : 42 },
  { "_id" : 3, "longValue" : 9223372036854775807 }
]
```

## Ejemplos de código
<a name="toLong-code"></a>

Para ver un ejemplo de código para usar el `$toLong` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const numbers = db.collection('numbers');

  const result = await numbers.aggregate([
    {
      $project: {
        _id: 1,
        longValue: { $toLong: "$value" }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    numbers = db.numbers

    result = list(numbers.aggregate([
        {
            '$project': {
                '_id': 1,
                'longValue': { '$toLong': '$value' }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1toLower
<a name="toLower"></a>

El `$toLower` operador de Amazon DocumentDB se utiliza para convertir una cadena a minúsculas.

**Parámetros**
+ `expression`: La expresión de cadena que se va a convertir a minúsculas.

## Ejemplo (MongoDB Shell)
<a name="toLower-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$toLower` operador para convertir el `Desk` campo a minúsculas.

**Cree documentos de muestra**

```
db.locations.insertMany([
  { "_id": 1, "Desk": "Düsseldorf-BVV-021" },
  { "_id": 2, "Desk": "Munich-HGG-32a" }
]);
```

**Ejemplo de consulta**

```
db.locations.aggregate([
  { $project: { item: { $toLower: "$Desk" } } }
]);
```

**Salida**

```
{ "_id" : 1, "item" : "düsseldorf-bvv-021" }
{ "_id" : 2, "item" : "munich-hgg-32a" }
```

## Ejemplos de código
<a name="toLower-code"></a>

Para ver un ejemplo de código para usar el `$toLower` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require("mongodb");

async function main() {
  const client = await MongoClient.connect("mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false");
  const db = client.db("test");
  const collection = db.collection("locations");

  const result = await collection.aggregate([
    { $project: { item: { $toLower: "$Desk" } } }
  ]).toArray();

  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def main():
    client = MongoClient("mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false")
    db = client["test"]
    collection = db["locations"]

    result = list(collection.aggregate([
        { "$project": { "item": { "$toLower": "$Desk" } } }
    ]))

    print(result)

    client.close()

if __name__ == "__main__":
    main()
```

------

# \$1toObjectId
<a name="toObjectId"></a>

Novedades de la versión 4.0

El `$toObjectId` operador de Amazon DocumentDB se utiliza para convertir una representación de cadena de an ObjectId en un tipo de ObjectId datos real. Esto puede resultar útil cuando se trabaja con datos que se han almacenado como representaciones en cadena de caracteres ObjectIds, ya que permite realizar operaciones que requieren ese tipo de ObjectId datos.

**Parámetros**
+ `expression`: expresión de cadena que representa un valor válido ObjectId.

## Ejemplo (MongoDB Shell)
<a name="toObjectId-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$toObjectId` operador para convertir una representación de cadena de an en el tipo ObjectId de ObjectId datos.

**Cree documentos de muestra**

```
db.employees.insertMany([
  { _id: 1, empId:"64e5f8886218c620cf0e8f8a", name: "Carol Smith", employeeId: "c720a" },
  { _id: 2, empId:"64e5f94e6218c620cf0e8f8c", name: "Bill Taylor", employeeId: "c721a" }
]);
```

**Ejemplo de consulta**

```
db.employees.aggregate([
  { $project: {
    "empIdAsObjectId": {$toObjectId: "$empId"}}
  }
]);
```

**Salida**

```
[
  { _id: 1, empIdAsObjectId: ObjectId('64e5f8886218c620cf0e8f8a') },
  { _id: 2, empIdAsObjectId: ObjectId('64e5f94e6218c620cf0e8f8c') }
]
```

## Ejemplos de código
<a name="toObjectId-code"></a>

Para ver un ejemplo de código para usar el `$toObjectId` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('employees');

  const result = await collection.aggregate([
    { $project: {
      "empIdAsObjectId": {$toObjectId: "$empId"}}
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['employees']

    result = list(collection.aggregate([
      { "$project": {
        "empIdAsObjectId": {"$toObjectId": "$empId"}}
      }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1toString
<a name="toString"></a>

Novedades de la versión 4.0

El `$toString` operador de Amazon DocumentDB se utiliza para convertir un valor de cualquier tipo (excepto nulo) en una representación de cadena. Esto puede resultar útil cuando necesite realizar operaciones de cadena en valores que originalmente no están en formato de cadena.

**Parámetros**
+ `expression`: la expresión que se va a convertir en cadena.

## Ejemplo (MongoDB Shell)
<a name="toString-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$toString` operador para convertir valores numéricos en cadenas.

**Cree documentos de muestra**

```
db.numbers.insertMany([
  { "_id": 1, "value": 42 },
  { "_id": 2, "value": 3.14 }
]);
```

**Ejemplo de consulta**

```
db.numbers.aggregate([
  { $project: {
    _id: 1,
    valueAsString: { $toString: "$value" }
  }}
]);
```

**Salida**

```
{ "_id": 1, "valueAsString": "42" }
{ "_id": 2, "valueAsString": "3.14" }
```

## Ejemplos de código
<a name="toString-code"></a>

Para ver un ejemplo de código para usar el `$toString` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('numbers');

  const result = await collection.aggregate([
    { $project: {
      _id: 1,
      valueAsString: { $toString: '$value' }
    }}
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['numbers']

    result = list(collection.aggregate([
        { '$project': {
            '_id': 1,
            'valueAsString': { '$toString': '$value' }
        }}
    ]))

    print(result)
    client.close()

example()
```

------

# \$1toUpper
<a name="toUpper"></a>

El `$toUpper` operador de Amazon DocumentDB se utiliza para convertir una cadena a mayúsculas.

**Parámetros**
+ `expression`: La expresión de cadena que se va a convertir a mayúsculas.

## Ejemplo (MongoDB Shell)
<a name="toUpper-examples"></a>

El siguiente ejemplo demuestra el uso del `$toUpper` operador para convertir el `Desk` campo a mayúsculas.

**Cree documentos de muestra**

```
db.locations.insertMany([
  { "_id": 1, "Desk": "düsseldorf-bvv-021" },
  { "_id": 2, "Desk": "munich-hgg-32a" }
]);
```

**Ejemplo de consulta**

```
db.locations.aggregate([
  { $project: { item: { $toUpper: "$Desk" } } }
]);
```

**Salida**

```
{ "_id" : 1, "item" : "DüSSELDORF-BVV-021" }
{ "_id" : 2, "item" : "MUNICH-HGG-32A" }
```

## Ejemplos de código
<a name="toUpper-code"></a>

Para ver un ejemplo de código para usar el `$toUpper` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('locations');

  const result = await collection.aggregate([
    { $project: { item: { $toUpper: '$Desk' } } }
  ]).toArray();

  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['locations']

    result = list(collection.aggregate([
        { '$project': { 'item': { '$toUpper': '$Desk' } } }
    ]))

    print(result)

    client.close()

example()
```

------

# \$1trim
<a name="trim"></a>

Nuevo a partir de la versión 4.0

El `$trim` operador de Amazon DocumentDB se utiliza para eliminar los espacios en blanco and/or iniciales y finales de una cadena.

**Parámetros**
+ `input`: La expresión de cadena que se va a recortar.
+ `chars`: (opcional) Especifica los caracteres que se van a recortar desde el principio y el final de la entrada; el valor predeterminado es el espacio en blanco.

## Ejemplo (MongoDB Shell)
<a name="trim-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$trim` operador para eliminar los espacios en blanco iniciales y finales de una cadena.

**Cree documentos de muestra**

```
db.people.insertMany([
  { "name": "   John Doe   " },
  { "name": "   Bob Johnson   " }
])
```

**Ejemplo de consulta**

```
db.people.aggregate([
  { $project: {
    "name": { $trim: {input: "$name"}}
  }}
])
```

**Salida**

```
[
  { "name": "John Doe" },
  { "name": "Bob Johnson" }
]
```

## Ejemplos de código
<a name="trim-code"></a>

Para ver un ejemplo de código para usar el `$trim` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('people');

  const result = await collection.aggregate([
    { $project: {
      "name": { $trim: {input: "$name" }}
    }}
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['people']

    result = list(collection.aggregate([
        {"$project": {
            "name": {"$trim": {"input": "$name"}}
        }}
    ]))

    print(result)
    client.close()

example()
```

------

# \$1type
<a name="type-aggregation"></a>

El operador de `$type` agregación devuelve el tipo de datos BSON de un campo especificado. Esto resulta útil para identificar el tipo de datos de los valores de campo durante las operaciones de agregación.

**Parámetros**
+ `expression`: el campo o la expresión cuyo tipo se va a devolver.

## Ejemplo (MongoDB Shell)
<a name="type-aggregation-examples"></a>

En el siguiente ejemplo, se muestra el uso `$type` del operador para identificar el tipo de datos del campo de precio de cada producto.

**Cree documentos de muestra**

```
db.inventory.insertMany([
  { _id: 1, item: "Notebook", price: 15.99 },
  { _id: 2, item: "Pen", price: "2.50" },
  { _id: 3, item: "Eraser", price: 1 },
  { _id: 4, item: "Ruler", price: null }
]);
```

**Ejemplo de consulta**

```
db.inventory.aggregate([
  {
    $project: {
      item: 1,
      price: 1,
      priceType: { $type: "$price" }
    }
  }
]);
```

**Salida**

```
[
  { _id: 1, item: 'Notebook', price: 15.99, priceType: 'double' },
  { _id: 2, item: 'Pen', price: '2.50', priceType: 'string' },
  { _id: 3, item: 'Eraser', price: 1, priceType: 'int' },
  { _id: 4, item: 'Ruler', price: null, priceType: 'null' }
]
```

## Ejemplos de código
<a name="type-aggregation-code"></a>

Para ver un ejemplo de código para usar el operador de `$type` agregación, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('inventory');

  const result = await collection.aggregate([
    {
      $project: {
        item: 1,
        price: 1,
        priceType: { $type: "$price" }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['inventory']

    result = list(collection.aggregate([
        {
            '$project': {
                'item': 1,
                'price': 1,
                'priceType': { '$type': '$price' }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1unset
<a name="unset-stage"></a>

Novedades de la versión 8.0

No es compatible con el clúster de Elastic.

La etapa de `$unset` agregación de Amazon DocumentDB le permite eliminar campos de los documentos.

**Parámetros**
+ `expression`: nombre de campo o lista de varios nombres de campo.

## Ejemplo (MongoDB Shell)
<a name="unset-stage-examples"></a>

El siguiente ejemplo demuestra el uso de la etapa de `$unset` agregación para eliminar el `price` campo.

**Cree documentos de muestra**

```
db.inventory.insertMany([
  { item: "pencil", quantity: 100, price: 0.24},
  { item: "pen", quantity: 204, price: 1.78 }
]);
```

**Ejemplo de agregación**

```
db.inventory.aggregate([
  {
    $unset: "price"
  }
])
```

**Salida**

```
[
  {
    _id: ObjectId('69248951d66dcae121d2950d'),
    item: 'pencil',
    quantity: 100
  },
  {
    _id: ObjectId('69248951d66dcae121d2950e'),
    item: 'pen',
    quantity: 204
  }
]
```

## Ejemplos de código
<a name="unset-stage-code"></a>

Para ver un ejemplo de código para usar el `$unset` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const inventory = db.collection('inventory');

  const result = await inventory.aggregate([
      {
        $unset: "price"
      }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    inventory = db['inventory']

    result = list(inventory.aggregate([
      {
        "$unset": "price"
      }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1unwind
<a name="unwind"></a>

El `$unwind` operador se utiliza para deconstruir un campo de matriz a partir de los documentos de entrada para generar un documento para cada elemento. Esto puede resultar útil cuando desee realizar operaciones en los elementos individuales de una matriz, como filtrar, ordenar o transformar los datos.

**Parámetros**
+ `path`: La ruta al campo de matriz que se va a desenrollar.
+ `includeArrayIndex`: (opcional) Especifica el nombre del nuevo campo que contiene el índice del elemento de la matriz.
+ `preserveNullAndEmptyArrays`: (opcional) Determina si la operación conserva el documento original cuando el campo de matriz es nulo o es una matriz vacía.

## Ejemplo (MongoDB Shell)
<a name="unwind-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$unwind` operador para deconstruir un campo de matriz y realizar más operaciones en los elementos individuales.

**Cree documentos de muestra**

```
db.people.insertMany([
  { _id: 1, name: "jon", hobbies: ["painting", "dancing", "singing"] },
  { _id: 2, name: "jane", hobbies: ["reading", "swimming"] },
  { _id: 3, name: "jack", hobbies: [] }
])
```

**Ejemplo de consulta**

```
db.people.aggregate([
  { $unwind: "$hobbies" }
])
```

**Salida**

```
[
  { _id: 1, name: 'jon', hobbies: 'painting' },
  { _id: 1, name: 'jon', hobbies: 'dancing' },
  { _id: 1, name: 'jon', hobbies: 'singing' },
  { _id: 2, name: 'jane', hobbies: 'reading' },
  { _id: 2, name: 'jane', hobbies: 'swimming' }
]
```

## Ejemplos de código
<a name="unwind-code"></a>

Para ver un ejemplo de código para usar el `$unwind` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('people');

  const result = await collection.aggregate([
    { $unwind: '$hobbies' }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['people']

    result = list(collection.aggregate([
        { '$unwind': '$hobbies' }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1 VectorSearch
<a name="vectorSearch"></a>

Nuevo desde la versión 8.0

No es compatible con el clúster de Elastic.

El `$vectorSearch` operador de Amazon DocumentDB le permite realizar una búsqueda vectorial, un método utilizado en el aprendizaje automático para encontrar puntos de datos similares mediante la comparación de sus representaciones vectoriales mediante métricas de distancia o similitud. Esta capacidad combina la flexibilidad y las sofisticadas consultas de una base de datos de documentos basada en JSON con el poder de la búsqueda vectorial, lo que le permite desarrollar casos de uso del aprendizaje automático y de la IA generativa, como la búsqueda semántica, la recomendación de productos, etc.

**Parámetros**
+ `<exact>`(opcional): marca que especifica si se debe ejecutar la búsqueda del vecino más cercano exacto (ENN) o del vecino más cercano aproximado (ANN). El valor puede ser uno de los siguientes:
+ false: para ejecutar una búsqueda ANN
+ true: para ejecutar la búsqueda ENN

Si se omite o se establece en falso, `numCandidates` es obligatorio.

```
- `<index>` : Name of the Vector Search index to use.
- `<limit>` : Number of documents to return in the results.
- `<numCandidates>` (optional): This field is required if 'exact' is false or omitted. Number of nearest neighbors to use during the search. Value must be less than or equal to (<=) 10000. You can't specify a number less than the number of documents to return ('limit').
- `<path>` : Indexed vector type field to search.
- `<queryVector>` : Array of numbers that represent the query vector.
```

## Ejemplo (MongoDB Shell)
<a name="vectorSearch-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$vectorSearch` operador para buscar descripciones de productos similares en función de sus representaciones vectoriales.

**Cree documentos de muestra**

```
db.products.insertMany([
  {
    _id: 1,
    name: "Product A",
    description: "A high-quality, eco-friendly product for your home.",
    description_vector: [ 0.2, 0.5, 0.8 ]
  },
  {
    _id: 2,
    name: "Product B",
    description: "An innovative and modern kitchen appliance.",
    description_vector: [0.7, 0.3, 0.9]
  },
  {
    _id: 3,
    name: "Product C",
    description: "A comfortable and stylish piece of furniture.",
    description_vector: [0.1, 0.2, 0.4]
  }
]);
```

**Crea un índice de búsqueda vectorial**

```
db.runCommand(
    {
        createIndexes: "products",
        indexes: [{
            key: {
                "description_vector": "vector"
            },
            vectorOptions: {
                type: "hnsw",
                dimensions: 3,
                similarity: "cosine",
                m: 16,
                efConstruction: 64
            },
            name: "description_index"
        }]
    }
);
```

**Ejemplo de consulta**

```
db.products.aggregate([
  { $vectorSearch: {
      index: "description_index",
      limit: 2,
      numCandidates: 10,
      path: "description_vector",
      queryVector: [0.1, 0.2, 0.3]
    }
  }
]);
```

**Salida**

```
[
  {
    "_id": 1,
    "name": "Product A",
    "description": "A high-quality, eco-friendly product for your home.",
    "description_vector": [ 0.2, 0.5, 0.8 ]
  },
  {
    "_id": 3,
    "name": "Product C",
    "description": "A comfortable and stylish piece of furniture.",
    "description_vector": [ 0.1, 0.2, 0.4 ]
  }
]
```

## Ejemplos de código
<a name="vectorSearch-code"></a>

Para ver un ejemplo de código para usar el `$vectorSearch` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findSimilarProducts(queryVector) {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('products');

  const result = await collection.aggregate([
    { $vectorSearch: {
        index: "description_index",
        limit: 2,
        numCandidates: 10,
        path: "description_vector",
        queryVector: queryVector
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

findSimilarProducts([0.1, 0.2, 0.3]);
```

------
#### [ Python ]

```
from pymongo import MongoClient


def find_similar_products(query_vector):
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.products

    result = list(collection.aggregate([
        {
            '$vectorSearch': {
                'index': "description_index",
                'limit': 2,
                'numCandidates': 10,
                'path': "description_vector",
                'queryVector': query_vector
            }
        }
    ]))

    print(result)
    client.close()

find_similar_products([0.1, 0.2, 0.3])
```

------

# \$1week
<a name="week"></a>

El `$week` operador de Amazon DocumentDB devuelve el número de semana de una fecha (0-53) según la norma ISO 8601. El número de semana se calcula en función del año y el día de la semana, y el lunes es el primer día de la semana.

**Parámetros**

Ninguno

## Ejemplo (MongoDB Shell)
<a name="week-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$week` operador para recuperar el número de semana de una fecha determinada.

**Cree documentos de muestra**

```
db.events.insertMany([
  { _id: 1, date: new Date("2023-01-01") },
  { _id: 2, date: new Date("2023-01-08") },
  { _id: 3, date: new Date("2023-12-31") }
]);
```

**Ejemplo de consulta**

```
db.events.aggregate([
  { $project: {
    _id: 1,
    week: { $week: "$date" }
  }}
]);
```

**Salida**

```
[
  { "_id": 1, "week": 1 },
  { "_id": 2, "week": 2 },
  { "_id": 3, "week": 53 }
]
```

## Ejemplos de código
<a name="week-code"></a>

Para ver un ejemplo de código para usar el `$week` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const events = db.collection('events');

  const result = await events.aggregate([
    { $project: {
      _id: 1,
      week: { $week: "$date" }
    }}
  ]).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
  client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
  db = client['test']
  events = db['events']

  result = list(events.aggregate([
      {'$project': {
          '_id': 1,
          'week': {'$week': '$date'}
      }}
  ]))

  print(result)

  client.close()

example()
```

------

# \$1year
<a name="year"></a>

El `$year` operador de Amazon DocumentDB extrae el componente del año de una fecha o marca horaria.

**Parámetros**
+ `expression`: La expresión de fecha o marca horaria de la que se extrae el componente del año.

## Ejemplo (MongoDB Shell)
<a name="year-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$year` operador para extraer el componente de año de un campo de fecha.

**Cree documentos de muestra**

```
db.events.insertMany([
  { "_id": 1, "date": ISODate("2023-04-15T00:00:00Z") },
  { "_id": 3, "date": ISODate("2021-12-31T00:00:00Z") }
]);
```

**Ejemplo de consulta**

```
db.events.aggregate([
  { $project: { year: { $year: "$date" } } }
]);
```

**Salida**

```
[
  { "_id": 1, "year": 2023 },
  { "_id": 3, "year": 2021 }
]
```

## Ejemplos de código
<a name="year-code"></a>

Para ver un ejemplo de código para usar el `$year` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('events');

  const result = await collection.aggregate([
    { $project: { year: { $year: "$date" } } }
  ]).toArray();

  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['events']

    result = list(collection.aggregate([
        {'$project': {'year': {'$year': '$date'}}}
    ]))

    print(result)

    client.close()

example()
```

------

# \$1zip
<a name="zip"></a>

El `$zip` operador de Amazon DocumentDB le permite combinar varias matrices en una sola matriz de tuplas (pares clave-valor). Esto resulta útil cuando necesita crear nuevos documentos u objetos mediante la combinación de datos de distintas fuentes o matrices dentro de un documento.

**Parámetros**
+ `inputs`: conjunto de expresiones que se convierten en matrices. Estas matrices se combinarán en una sola matriz de tuplas.
+ `useLongestLength`: (opcional) Si`true`, la matriz de salida tendrá la longitud de la matriz de entrada más larga, rellenando las matrices más cortas con valores. `null` Si`false`, la matriz de salida tendrá la longitud de la matriz de entrada más corta.
+ `defaults`: (opcional) Una matriz de valores predeterminados para usar en las tuplas si la matriz de entrada correspondiente es más corta que la matriz de entrada más larga y lo `useLongestLength` es`true`.

## Ejemplo (MongoDB Shell)
<a name="zip-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$zip` operador para combinar dos matrices en una sola matriz de tuplas.

**Cree documentos de muestra**

```
db.grades.insert([
  {
    "_id": 1,
    "name": "John",
    "scores": [90, 85, 92],
    "classes": ["Math", "English", "Science"]
  },
  {
    "_id": 2,
    "name": "Jane",
    "scores": [88, 91, 90, 85],
    "classes": ["Math", "English", "Science", "History"]
  }
])
```

**Ejemplo de consulta**

```
db.grades.aggregate([
  {
    $project: {
      "name": 1,
      "scoredClasses": {
        $zip: {
          inputs: ["$scores", "$classes"],
          useLongestLength: true,
          defaults: [null, null]
        }
      }
    }
  }
])
```

**Salida**

```
[
  {
    "_id": 1,
    "name": "John",
    "scoredClasses": [
      [90, "Math"],
      [85, "English"],
      [92, "Science"],
      [null, null]
    ]
  },
  {
    "_id": 2,
    "name": "Jane",
    "scoredClasses": [
      [88, "Math"],
      [91, "English"],
      [90, "Science"],
      [85, "History"]
    ]
  }
]
```

## Ejemplos de código
<a name="zip-code"></a>

Para ver un ejemplo de código para usar el `$zip` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('grades');

  const result = await collection.aggregate([
    {
      $project: {
        "name": 1,
        "scoredClasses": {
          $zip: {
            inputs: ["$scores", "$classes"],
            useLongestLength: true,
            defaults: [null, null]
          }
        }
      }
    }
  ]).toArray();

  console.log(result);
  client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['grades']

    result = list(collection.aggregate([
        {
            '$project': {
                'name': 1,
                'scoredClasses': {
                    '$zip': {
                        'inputs': ['$scores', '$classes'],
                        'useLongestLength': True,
                        'defaults': [None, None]
                    }
                }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# Geospatial (Geoespacial)
<a name="mongo-apis-geospatial-operators"></a>

En esta sección se proporciona información detallada sobre los operadores geoespaciales compatibles con Amazon DocumentDB.

**Topics**
+ [\$1geometry](geometry.md)
+ [\$1geoIntersects](geoIntersects.md)
+ [\$1geoWithin](geoWithin.md)
+ [\$1maxDistance](maxDistance.md)
+ [\$1minDistance](minDistance.md)
+ [\$1near](near.md)
+ [\$1nearSphere](nearSphere.md)

# \$1geometry
<a name="geometry"></a>

El `$geometry` operador de Amazon DocumentDB se utiliza para especificar un objeto geométrico de GeoJSON como parte de una consulta geoespacial. Este operador se utiliza junto con otros operadores de consultas geoespaciales, por ejemplo`$geoWithin`, `$geoIntersects` para realizar consultas espaciales en sus datos.

En Amazon DocumentDB, el `$geometry` operador admite los siguientes tipos de geometría de GeoJSON:
+ Point
+ LineString
+ Polygon
+ MultiPoint
+ MultiLineString
+ MultiPolygon
+ GeometryCollection

**Parámetros**
+ `type`: El tipo del objeto geométrico de GeoJSON, por ejemplo,, `Point``Polygon`, etc.
+ `coordinates`: Una matriz de coordenadas que representa la geometría. La estructura de la matriz de coordenadas depende del tipo de geometría.

## Ejemplo (MongoDB Shell)
<a name="geometry-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$geometry` operador para realizar una `$geoIntersects` consulta en Amazon DocumentDB.

**Cree documentos de muestra**

```
db.locations.insertMany([
  { 
    "_id": 1,
    "name": "Location 1",
    "location": { 
      "type": "Point",
      "coordinates": [-73.983253, 40.753941]
    }
  },
  { 
    "_id": 2,
    "name": "Location 2", 
    "location": {
      "type": "Polygon",
      "coordinates": [[
        [-73.998427, 40.730309],
        [-73.954348, 40.730309],
        [-73.954348, 40.780816],
        [-73.998427, 40.780816],
        [-73.998427, 40.730309]
      ]]
    }
  }
]);
```

**Ejemplo de consulta**

```
db.locations.find({
  "location": {
    "$geoIntersects": {
      "$geometry": {
        "type": "Polygon",
        "coordinates": [[
          [-73.998, 40.730],
          [-73.954, 40.730],
          [-73.954, 40.781],
          [-73.998, 40.781],
          [-73.998, 40.730]
        ]]
      }
    }
  }
})
```

**Salida**

```
[
  {
    "_id": 2,
    "name": "Location 2",
    "location": {
      "type": "Polygon",
      "coordinates": [
        [
          [-73.998427, 40.730309],
          [-73.954348, 40.730309],
          [-73.954348, 40.780816],
          [-73.998427, 40.780816],
          [-73.998427, 40.730309]
        ]
      ]
    }
  }
]
```

## Ejemplos de código
<a name="geometry-code"></a>

Para ver un ejemplo de código para usar el `$geometry` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('locations');

  const query = {
    "location": {
      "$geoIntersects": {
        "$geometry": {
          "type": "Polygon",
          "coordinates": [[
            [-73.998, 40.730],
            [-73.954, 40.730],
            [-73.954, 40.781],
            [-73.998, 40.781],
            [-73.998, 40.730]
          ]]
        }
      }
    }
  };

  const result = await collection.find(query).toArray();
  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['locations']

    query = {
        "location": {
            "$geoIntersects": {
                "$geometry": {
                    "type": "Polygon",
                    "coordinates": [[
                        [-73.998, 40.730],
                        [-73.954, 40.730],
                        [-73.954, 40.781],
                        [-73.998, 40.781],
                        [-73.998, 40.730]
                    ]]
                }
            }
        }
    }

    result = list(collection.find(query))
    print(result)

    client.close()

example()
```

------

# \$1geoIntersects
<a name="geoIntersects"></a>

El `$geoIntersects` operador de Amazon DocumentDB se utiliza para buscar documentos cuyos datos geoespaciales se cruzan con un objeto GeoJSON específico. Este operador es útil para aplicaciones que requieren identificar documentos en función de su relación espacial con una forma geográfica determinada, como un polígono o un multipolígono.

**Parámetros**
+ `$geometry`: un objeto GeoJSON que representa la forma para comprobar la intersección. Los tipos de objetos GeoJSON compatibles son `Point` `LineString``Polygon`, y. `MultiPolygon`

## Ejemplo (MongoDB Shell)
<a name="geoIntersects-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$geoIntersects` operador para buscar el nombre de estado de un conjunto de coordenadas determinado en Amazon DocumentDB.

**Cree documentos de muestra**

```
db.states.insertMany([
  {
    "name": "New York",
    "loc": {
      "type": "Polygon",
      "coordinates": [[
        [-74.25909423828125, 40.47556838210948],
        [-73.70819091796875, 40.47556838210948],
        [-73.70819091796875, 41.31342607582222],
        [-74.25909423828125, 41.31342607582222],
        [-74.25909423828125, 40.47556838210948]
      ]]
    }
  },
  {
    "name": "California",
    "loc": {
      "type": "Polygon",
      "coordinates": [[
        [-124.4091796875, 32.56456771381587],
        [-114.5458984375, 32.56456771381587],
        [-114.5458984375, 42.00964153424558],
        [-124.4091796875, 42.00964153424558],
        [-124.4091796875, 32.56456771381587]
      ]]
    }
  }
]);
```

**Ejemplo de consulta**

```
var location = [-73.965355, 40.782865];

db.states.find({
  "loc": {
    "$geoIntersects": {
      "$geometry": {
        "type": "Point",
        "coordinates": location
      }
    }
  }
}, {
  "name": 1
});
```

**Salida**

```
{ "_id" : ObjectId("536b0a143004b15885c91a2c"), "name" : "New York" }
```

## Ejemplos de código
<a name="geoIntersects-code"></a>

Para ver un ejemplo de código para usar el `$geoIntersects` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findStateByGeoIntersects(longitude, latitude) {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('states');

  const query = {
    loc: {
      $geoIntersects: {
        $geometry: {
          type: 'Point',
          coordinates: [longitude, latitude]
        }
      }
    }
  };

  const projection = {
    _id: 0,
    name: 1
  };

  const document = await collection.findOne(query, { projection });

  await client.close();
  
  if (document) {
    return document.name;
  } else {
    throw new Error('The geo location you entered was not found in the United States!');
  }
}
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_state_by_geointersects(longitude, latitude):
    try:
        client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
        db = client.test
        collection_states = db.states

        query_geointersects = {
            "loc": {
                "$geoIntersects": {
                    "$geometry": {
                        "type": "Point",
                        "coordinates": [longitude, latitude]
                    }
                }
            }
        }

        document = collection_states.find_one(query_geointersects,
                                              projection={
                                                  "_id": 0,
                                                  "name": 1
                                              })
        if document is not None:
            state_name = document['name']
            return state_name
        else:
            raise Exception("The geo location you entered was not found in the United States!")
    except Exception as e:
        print('Exception in geoIntersects: {}'.format(e))
        raise
    finally:
        if client is not None:
            client.close()
```

------

# \$1geoWithin
<a name="geoWithin"></a>

El `$geoWithin` operador de Amazon DocumentDB se utiliza para buscar documentos cuyos datos de ubicación (representados como objetos GeoJSON) estén completamente contenidos en una forma específica, como un polígono o un multipolígono. Esto resulta útil para consultar objetos que se encuentran dentro de una región geográfica específica.

**Parámetros**
+ `$geometry`: un objeto GeoJSON que representa la forma sobre la que se va a realizar la consulta.

## Ejemplo (MongoDB Shell)
<a name="geoWithin-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$geoWithin` operador para buscar todos los aeropuertos ubicados en el estado de Nueva York.

**Cree documentos de muestra**

```
// Insert state document
db.states.insert({
    "name": "New York",
    "loc": {
        "type": "Polygon",
        "coordinates": [[
            [-79.76278, 45.0],
            [-73.94, 45.0],
            [-73.94, 40.5],
            [-79.76278, 40.5],
            [-79.76278, 45.0]
        ]]
    }
});

// Insert airport documents
db.airports.insert([
    {
        "name": "John F. Kennedy International Airport",
        "type": "airport",
        "code": "JFK",
        "loc": {
            "type": "Point",
            "coordinates": [-73.7781, 40.6413]
        }
    },
    {
        "name": "LaGuardia Airport",
        "type": "airport",
        "code": "LGA",
        "loc": {
            "type": "Point",
            "coordinates": [-73.8772, 40.7769]
        }
    },
    {
        "name": "Buffalo Niagara International Airport",
        "type": "airport",
        "code": "BUF",
        "loc": {
            "type": "Point",
            "coordinates": [-78.7322, 42.9403]
        }
    }
]);
```

**Ejemplo de consulta**

```
var state = db.states.findOne({"name": "New York"});

db.airports.find({
    "loc": {
        "$geoWithin": {
            "$geometry": state.loc
        }
    }
}, {
    "name": 1,
    "type": 1,
    "code": 1,
    "_id": 0
});
```

**Salida**

```
[
  {
    "name": "John F. Kennedy International Airport",
    "type": "airport",
    "code": "JFK"
  },
  {
    "name": "LaGuardia Airport",
    "type": "airport",
    "code": "LGA"
  }
]
```

## Ejemplos de código
<a name="geoWithin-code"></a>

Para ver un ejemplo de código para usar el `$geoWithin` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findAirportsWithinState(stateName) {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');

  const stateDoc = await db.collection('states').findOne({ name: stateName }, { projection: { _id: 0, loc: 1 } });
  const airportDocs = await db.collection('airports').find({
    loc: {
      $geoWithin: {
        $geometry: stateDoc.loc
      }
    }
  }, { projection: { name: 1, type: 1, code: 1, _id: 0 } }).toArray();

  console.log(airportDocs);

  await client.close();
}

findAirportsWithinState('New York');
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_airports_within_state(state_name):
    try:
        client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
        db = client['test']
        state_doc = db.states.find_one({'name': state_name}, {'_id': 0, 'loc': 1})
        airport_docs = db.airports.find({
            'loc': {
                '$geoWithin': {
                    '$geometry': state_doc['loc']
                }
            }
        }, {'name': 1, 'type': 1, 'code': 1, '_id': 0})
        
        return list(airport_docs)
    except Exception as e:
        print(f'Error: {e}')
    finally:
        client.close()

airports = find_airports_within_state('New York')
print(airports)
```

------

# \$1maxDistance
<a name="maxDistance"></a>

El `$maxDistance` operador de Amazon DocumentDB se utiliza para especificar la distancia máxima (en metros) desde un punto GeoJSON a la que deben estar los documentos para incluirlos en los resultados de la consulta. Este operador se usa junto con el `$nearSphere` operador para realizar consultas geoespaciales.

**Parámetros**
+ `$maxDistance`: La distancia máxima (en metros) desde el punto de referencia a la que deben estar los documentos para incluirlos en los resultados de la consulta.

## Ejemplo (MongoDB Shell)
<a name="maxDistance-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$maxDistance` operador en Amazon DocumentDB para buscar todas las capitales de estado en un radio de 100 kilómetros de Boston.

**Cree documentos de muestra**

```
db.capitals.insert([
  { state: "Massachusetts", city: "Boston", location: { type: "Point", coordinates: [-71.0589, 42.3601] } },
  { state: "Rhode Island", city: "Providence", location: { type: "Point", coordinates: [-71.4128, 41.8239] } },
  { state: "New Hampshire", city: "Concord", location: { type: "Point", coordinates: [-71.5383, 43.2067] } },
  { state: "Vermont", city: "Montpelier", location: { type: "Point", coordinates: [-72.5751, 44.2604] } }
]);
```

**Ejemplo de consulta**

```
db.capitals.find(
  {
    location: {
      $nearSphere: {
        $geometry: { type: "Point", coordinates: [-71.0589, 42.3601] },
        $maxDistance: 100000
      }
    }
  },
  { state: 1, city: 1, _id: 0 }
);
```

**Salida**

```
[
  { "state": "Rhode Island", "city": "Providence" },
  { "state": "New Hampshire", "city": "Concord" }
]
```

## Ejemplos de código
<a name="maxDistance-code"></a>

Para ver un ejemplo de código para usar el `$maxDistance` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findCapitalsNearBoston() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const capitals = db.collection('capitals');

  const result = await capitals.find({
    location: {
      $nearSphere: {
        $geometry: { type: "Point", coordinates: [-71.0589, 42.3601] },
        $maxDistance: 100000
      }
    }
  }, {
    projection: { state: 1, city: 1, _id: 0 }
  }).toArray();

  console.log(result);
  await client.close();
}

findCapitalsNearBoston();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_capitals_near_boston():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    capitals = db.capitals

    result = list(capitals.find(
        {
            "location": {
                "$nearSphere": {
                    "$geometry": { "type": "Point", "coordinates": [-71.0589, 42.3601] },
                    "$maxDistance": 100000
                }
            }
        },
        {"state": 1, "city": 1, "_id": 0}
    ))

    print(result)
    client.close()

find_capitals_near_boston()
```

------

# \$1minDistance
<a name="minDistance"></a>

`$minDistance`es un operador de búsqueda que se utiliza junto con `$nearSphere` o `$geoNear` para filtrar documentos que se encuentran al menos a la distancia mínima especificada desde el punto central. Este operador es compatible con Amazon DocumentDB y funciona de forma similar a su homólogo en MongoDB.

**Parámetros**
+ `$minDistance`: La distancia mínima (en metros) desde el punto central para incluir documentos en los resultados.

## Ejemplo (MongoDB Shell)
<a name="minDistance-examples"></a>

En este ejemplo, buscaremos todos los restaurantes en un radio de 2 kilómetros de una ubicación específica en Seattle, Washington.

**Cree documentos de muestra**

```
db.usarestaurants.insertMany([
  {
    "state": "Washington",
    "city": "Seattle",
    "name": "Noodle House",
    "rating": 4.8,
    "location": {
      "type": "Point",
      "coordinates": [-122.3517, 47.6159]
    }
  },
  {
    "state": "Washington",
    "city": "Seattle",
    "name": "Pike Place Grill",
    "rating": 4.5,
    "location": {
      "type": "Point",
      "coordinates": [-122.3412, 47.6102]
    }
  },
  {
    "state": "Washington",
    "city": "Bellevue",
    "name": "The Burger Joint",
    "rating": 4.2,
    "location": {
      "type": "Point",
      "coordinates": [-122.2007, 47.6105]
    }
  }
]);
```

**Ejemplo de consulta**

```
db.usarestaurants.find({
  "location": {
    "$nearSphere": {
      "$geometry": {
        "type": "Point",
        "coordinates": [-122.3516, 47.6156]
      },
      "$minDistance": 1,
      "$maxDistance": 2000
    }
  }
}, {
  "name": 1
});
```

**Salida**

```
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "name" : "Noodle House" }
{ "_id" : ObjectId("611f3da985009a81ad38e74c"), "name" : "Pike Place Grill" }
```

## Ejemplos de código
<a name="minDistance-code"></a>

Para ver un ejemplo de código para usar el `$minDistance` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findRestaurantsNearby() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('usarestaurants');

  const result = await collection.find({
    "location": {
      "$nearSphere": {
        "$geometry": {
          "type": "Point",
          "coordinates": [-122.3516, 47.6156]
        },
        "$minDistance": 1,
        "$maxDistance": 2000
      }
    }
  }, {
    "projection": { "name": 1 }
  }).toArray();

  console.log(result);
  client.close();
}

findRestaurantsNearby();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_restaurants_nearby():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.usarestaurants

    result = list(collection.find({
        "location": {
            "$nearSphere": {
                "$geometry": {
                    "type": "Point",
                    "coordinates": [-122.3516, 47.6156]
                },
                "$minDistance": 1,
                "$maxDistance": 2000
            }
        }
    }, {
        "projection": {"name": 1}
    }))

    print(result)
    client.close()

find_restaurants_nearby()
```

------

# \$1near
<a name="near"></a>

El `$near` operador de Amazon DocumentDB se utiliza para buscar documentos que se encuentran geográficamente cerca de un punto específico. Devuelve los documentos ordenados por distancia, con los documentos más cercanos primero. Este operador requiere un índice geoespacial de 2dsphere y es útil para consultas de proximidad sobre datos de ubicación.

**Parámetros**
+ `$geometry`: un objeto GeoJSON Point que define el punto central de la consulta de proximidad.
+ `$maxDistance`: (opcional) La distancia máxima en metros desde el punto especificado que puede ocupar un documento para que coincida con la consulta.
+ `$minDistance`: (opcional) La distancia mínima en metros desde el punto especificado en la que puede estar un documento para que coincida con la consulta.

**Requisitos del índice**
+ `2dsphere index`: Necesario para consultas geoespaciales sobre datos de puntos de GeoJSON.

## Ejemplo (MongoDB Shell)
<a name="near-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$near` operador para buscar los restaurantes más cercanos a una ubicación específica en Seattle, Washington.

**Cree documentos de muestra**

```
db.usarestaurants.insert([
  {
    "name": "Noodle House",
    "city": "Seattle",
    "state": "Washington",
    "rating": 4.8,
    "location": { "type": "Point", "coordinates": [-122.3517, 47.6159] }
  },
  {
    "name": "Pike Place Grill",
    "city": "Seattle",
    "state": "Washington",
    "rating": 4.2,
    "location": { "type": "Point", "coordinates": [-122.3403, 47.6062] }
  },
  {
    "name": "Lola",
    "city": "Seattle",
    "state": "Washington",
    "rating": 4.5,
    "location": { "type": "Point", "coordinates": [-122.3407, 47.6107] }
  }
]);
```

**Cree el índice de 2dsphere**

```
db.usarestaurants.createIndex({ "location": "2dsphere" });
```

**Ejemplo de consulta con GeoJSON Point**

```
db.usarestaurants.find({
  location: {
    $near: {
      $geometry: {
        type: "Point",
        coordinates: [-122.3516, 47.6156]
      },
      $maxDistance: 100,
      $minDistance: 10
    }
  }
});
```

**Salida**

```
{
  "_id" : ObjectId("69031ec9ea1c2922a1ce5f4a"),
  "name" : "Noodle House",
  "city" : "Seattle",
  "state" : "Washington",
  "rating" : 4.8,
  "location" : {
    "type" : "Point",
    "coordinates" : [ -122.3517, 47.6159 ]
  }
}
```

## Ejemplos de código
<a name="near-code"></a>

Para ver un ejemplo de código para usar el `$near` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findNearbyRestaurants() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const restaurants = db.collection('usarestaurants');

  // Create 2dsphere index
  await restaurants.createIndex({ "location": "2dsphere" });

  const result = await restaurants.find({
    location: {
      $near: {
        $geometry: {
          type: "Point",
          coordinates: [-122.3516, 47.6156]
        },
        $maxDistance: 100,
        $minDistance: 10
      }
    }
  }).toArray();

  console.log(result);

  client.close();
}

findNearbyRestaurants();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_nearby_restaurants():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    restaurants = db['usarestaurants']

    # Create 2dsphere index
    restaurants.create_index([("location", "2dsphere")])

    result = list(restaurants.find({
        'location': {
            '$near': {
                '$geometry': {
                    'type': 'Point',
                    'coordinates': [-122.3516, 47.6156]
                },
                '$maxDistance': 100,
                '$minDistance': 10
            }
        }
    }))

    print(result)

    client.close()

find_nearby_restaurants()
```

------

# \$1nearSphere
<a name="nearSphere"></a>

El `$nearSphere` operador de Amazon DocumentDB se utiliza para buscar documentos que se encuentran a una distancia específica de un punto geoespacial. Este operador es particularmente útil para consultas geoespaciales, como encontrar todos los restaurantes dentro de un radio determinado de una ubicación determinada.

**Parámetros**
+ `$geometry`: un objeto GeoJSON que representa el punto de referencia. Debe ser un `Point` objeto con `coordinates` campos `type` y.
+ `$minDistance`: (opcional) La distancia mínima (en metros) desde el punto de referencia que deben estar los documentos.
+ `$maxDistance`: (opcional) La distancia máxima (en metros) desde el punto de referencia que deben estar los documentos.

## Ejemplo (MongoDB Shell)
<a name="nearSphere-examples"></a>

En este ejemplo, encontraremos todos los restaurantes en un radio de 2 kilómetros (2000 metros) de una ubicación específica en Seattle, Washington.

**Cree documentos de muestra**

```
db.usarestaurants.insert([
  {
    name: "Noodle House",
    location: { type: "Point", coordinates: [-122.3516, 47.6156] }
  },
  {
    name: "Pike Place Grill",
    location: { type: "Point", coordinates: [-122.3403, 47.6101] }
  },
  {
    name: "Seattle Coffee Co.",
    location: { type: "Point", coordinates: [-122.3339, 47.6062] }
  }
]);
```

**Ejemplo de consulta**

```
db.usarestaurants.find({
  location: {
    $nearSphere: {
      $geometry: {
        type: "Point",
        coordinates: [-122.3516, 47.6156]
      },
      $minDistance: 1,
      $maxDistance: 2000
    }
  }
}, {
  name: 1
});
```

**Salida**

```
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "name" : "Noodle House" }
{ "_id" : ObjectId("611f3da985009a81ad38e74c"), "name" : "Pike Place Grill" }
```

## Ejemplos de código
<a name="nearSphere-code"></a>

Para ver un ejemplo de código para usar el `$nearSphere` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findNearbyRestaurants() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const restaurants = db.collection('usarestaurants');

  const result = await restaurants.find({
    location: {
      $nearSphere: {
        $geometry: {
          type: "Point",
          coordinates: [-122.3516, 47.6156]
        },
        $minDistance: 1,
        $maxDistance: 2000
      }
    }
  }, {
    projection: { name: 1 }
  }).toArray();

  console.log(result);
  client.close();
}

findNearbyRestaurants();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_nearby_restaurants():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    restaurants = db.usarestaurants

    result = list(restaurants.find({
        'location': {
            '$nearSphere': {
                '$geometry': {
                    'type': 'Point',
                    'coordinates': [-122.3516, 47.6156]
                },
                '$minDistance': 1,
                '$maxDistance': 2000
            }
        }
    }, {
        'name': 1
    }))

    print(result)
    client.close()

find_nearby_restaurants()
```

------

# Operadores de consulta y proyección
<a name="mongo-apis-query-projection-operators"></a>

En esta sección se proporciona información detallada sobre los operadores de consulta y proyección compatibles con Amazon DocumentDB.

**Topics**
+ [\$1](dollar-projection.md)
+ [\$1all](all.md)
+ [\$1and](and.md)
+ [\$1bitsAllClear](bitsAllClear.md)
+ [\$1bitsAllSet](bitsAllSet.md)
+ [\$1bitsAnyClear](bitsAnyClear.md)
+ [\$1bitsAnySet](bitsAnySet.md)
+ [\$1comment](comment.md)
+ [\$1elemMatch](elemMatch.md)
+ [\$1eq](eq.md)
+ [\$1exists](exists.md)
+ [\$1expr](expr.md)
+ [\$1gt](gt.md)
+ [\$1gte](gte.md)
+ [\$1in](in.md)
+ [\$1jsonSchema](jsonSchema.md)
+ [\$1lt](lt.md)
+ [\$1mod](mod-query.md)
+ [\$1lte](lte.md)
+ [\$1meta](meta.md)
+ [\$1ne](ne.md)
+ [\$1nin](nin.md)
+ [\$1nor](nor.md)
+ [\$1not](not.md)
+ [\$1or](or.md)
+ [\$1regex](regex.md)
+ [\$1slice](slice-projection.md)
+ [\$1size](size-query.md)
+ [\$1text](text.md)
+ [\$1type](type.md)

# \$1
<a name="dollar-projection"></a>

El operador de `$` proyección limita el contenido de un campo de matriz para que devuelva solo el primer elemento que coincida con la condición de consulta. Se utiliza para proyectar un único elemento de matriz coincidente.

**Parámetros**
+ `field.$`: El campo de matriz con el operador posicional para proyectar el primer elemento coincidente.

## Ejemplo (MongoDB Shell)
<a name="dollar-projection-examples"></a>

El siguiente ejemplo demuestra el uso del operador de `$` proyección para devolver solo el elemento de matriz coincidente.

**Cree documentos de muestra**

```
db.students.insertMany([
  { _id: 1, name: "Alice", grades: [85, 92, 78, 95] },
  { _id: 2, name: "Bob", grades: [70, 88, 92, 65] },
  { _id: 3, name: "Charlie", grades: [95, 89, 91, 88] }
]);
```

**Ejemplo de consulta**

```
db.students.find(
  { grades: { $gte: 90 } },
  { name: 1, "grades.$": 1 }
);
```

**Salida**

```
{ "_id" : 1, "name" : "Alice", "grades" : [ 92 ] }
{ "_id" : 2, "name" : "Bob", "grades" : [ 92 ] }
{ "_id" : 3, "name" : "Charlie", "grades" : [ 95 ] }
```

En este ejemplo, solo se devuelve la primera calificación que sea mayor o igual a 90 para cada alumno.

## Ejemplos de código
<a name="dollar-projection-code"></a>

Para ver un ejemplo de código para usar el operador de `$` proyección, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('students');

  const result = await collection.find(
    { grades: { $gte: 90 } },
    { projection: { name: 1, "grades.$": 1 } }
  ).toArray();

  console.log(JSON.stringify(result, null, 2));
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['students']

    result = list(collection.find(
        {'grades': {'$gte': 90}},
        {'name': 1, 'grades.$': 1}
    ))

    print(result)
    client.close()

example()
```

------

# \$1all
<a name="all"></a>

El `$all` operador de Amazon DocumentDB se utiliza para hacer coincidir documentos en los que el valor de un campo es una matriz y contiene todos los elementos especificados, independientemente del orden de los elementos de la matriz.

**Parámetros**
+ `field`: el nombre del campo que se va a comprobar.
+ `[value1, value2, ...]`: la lista de valores que deben coincidir en la matriz.

 

**Utilización `$elemMatch` dentro de una `$all` expresión**

Consulte [Uso de `$elemMatch` dentro de una expresión `$all`](functional-differences.md#functional-differences.elemMatch) las limitaciones relacionadas con el uso del `$elemMatch` operador en una `$all` expresión.

 

**Dólares (\$1) en los nombres de campo**

Consulte las limitaciones [Dólar(\$1) y punto(.) en los nombres de campos](functional-differences.md#functional-differences-dollardot) relacionadas con la consulta de campos con `$` prefijo `$all` en objetos anidados.

## Ejemplo (MongoDB Shell)
<a name="all-examples"></a>

El siguiente ejemplo demuestra el uso del `$all` operador para recuperar documentos en los que el campo «Colores» es una matriz que contiene tanto «Rojo» como «Azul».

**Cree documentos de muestra**

```
db.example.insertMany([
  { "Item": "Pen", "Colors": ["Red", "Blue", "Green"] },
  { "Item": "Notebook", "Colors": ["Blue", "White"] },
  { "Item": "Poster Paint", "Colors": ["Red", "Yellow", "White"] }
])
```

**Ejemplo de consulta**

```
db.example.find({ "Colors": { $all: ["Red", "Blue"] } }).pretty()
```

**Salida**

```
{
  "_id" : ObjectId("6137d6c5b3a1d35e0b6ee6ad"),
  "Item" : "Pen",
  "Colors" : [ 
          "Red", 
          "Blue", 
          "Green" 
  ]
}
```

## Ejemplos de código
<a name="all-code"></a>

Para ver un ejemplo de código para usar el `$all` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('example');

  const result = await collection.find({ "Colors": { $all: ["Red", "Blue"] } }).toArray();
  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['example']

    result = list(collection.find({ "Colors": { "$all": ["Red", "Blue"] } }))
    print(result)

    client.close()

example()
```

------

# \$1and
<a name="and"></a>

El `$and` operador de Amazon DocumentDB se utiliza para combinar varias expresiones y evaluarlas como una sola condición. Retorna `true` si todas las expresiones proporcionadas se evalúan `true` igual o `false` no. Este operador es útil para aplicar varios criterios a una consulta.

**Parámetros**
+ `expression1`: expresión obligatoria que da como resultado un valor booleano.
+ `expression2`: expresión obligatoria que da como resultado un valor booleano.
+ `...`: Expresiones obligatorias adicionales que se evalúan como valores booleanos.

## Ejemplo (MongoDB Shell)
<a name="and-examples"></a>

El siguiente ejemplo demuestra el uso del `$and` operador para buscar todos los documentos de la colección «usuarios» en los que el campo «edad» es mayor de 18 años y el campo «estado» es «activo».

**Cree documentos de muestra**

```
db.users.insertMany([
  { name: "John", age: 25, status: "active" },
  { name: "Jane", age: 17, status: "active" },
  { name: "Bob", age: 30, status: "inactive" },
  { name: "Alice", age: 22, status: "active" }
]);
```

**Ejemplo de consulta**

```
db.users.find({
  $and: [
    { age: { $gt: 18 } },
    { status: "active" }
  ]
});
```

**Salida**

```
[
  { "_id" : ObjectId("614e3c4b63f5892e7c4e2345"), "name" : "John", "age" : 25, "status" : "active" },
  { "_id" : ObjectId("614e3c4b63f5892e7c4e2347"), "name" : "Alice", "age" : 22, "status" : "active" }
]
```

## Ejemplos de código
<a name="and-code"></a>

Para ver un ejemplo de código para usar el `$and` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findActiveUsersOlderThan18() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const users = db.collection('users');

  const activeUsersOlderThan18 = await users.find({
    $and: [
      { age: { $gt: 18 } },
      { status: 'active' }
    ]
  }).toArray();

  console.log(activeUsersOlderThan18);
  await client.close();
}

findActiveUsersOlderThan18();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_active_users_older_than_18():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    users = db['users']

    active_users_older_than_18 = list(users.find({
        '$and': [
            {'age': {'$gt': 18}},
            {'status': 'active'}
        ]
    }))

    print(active_users_older_than_18)
    client.close()

find_active_users_older_than_18()
```

------

# \$1bitsAllClear
<a name="bitsAllClear"></a>

El `$bitsAllClear` operador de Amazon DocumentDB se utiliza para hacer coincidir los documentos en los que se borran todos los bits especificados de un campo (establecido en 0). Este operador puede resultar útil para realizar operaciones bit a bit en los datos almacenados.

**Parámetros**
+ `field`: El campo para comprobar si se están borrando los bits especificados.
+ `value`: la máscara de bits numérica que especifica los bits que se deben comprobar o una lista de las posiciones de los bits que se van a comprobar. Una máscara de bits numérica puede tener una forma binaria (0b...), decimal, hexadecimal (0x...), octal (0o...) o binaria (). BinData En una lista de posiciones de bits, la posición del bit menos significativo es 0.

## Ejemplo (MongoDB Shell)
<a name="bitsAllClear-examples"></a>

El siguiente ejemplo demuestra el uso del `$bitsAllClear` operador en Amazon DocumentDB.

**Cree documentos de muestra**

```
db.collection.insertMany([
  { _id: 1, bits: 0b1010 },
  { _id: 2, bits: 0b1100 },
  { _id: 3, bits: 0b0101 }
]);
```

**Ejemplo de consulta**

```
db.collection.find({
  bits: { $bitsAllClear: 0b0011 }
})
```

**Salida**

```
{ "_id" : 2, "bits" : 12 }
```

La consulta comprueba si todos los bits especificados por la máscara de bits `0b0011` (los dos bits menos significativos) están borrados del `bits` campo. El documento con `_id` 2 cumple esta condición, ya que su `bits` campo tiene esos bits borrados.

## Ejemplos de código
<a name="bitsAllClear-code"></a>

Para ver un ejemplo de código para usar el `$bitsAllClear` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('collection');

  const result = await collection.find({
    bits: { $bitsAllClear: 0b0011 }
  }).toArray();

  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['collection']

    result = list(collection.find({
        'bits': { '$bitsAllClear': 0b0011 }
    }))

    print(result)

    client.close()

example()
```

------

# \$1bitsAllSet
<a name="bitsAllSet"></a>

El `$bitsAllSet` operador de Amazon DocumentDB se utiliza para consultar documentos en los que un conjunto específico de bits está establecido en 1 en un campo. Este operador le permite realizar operaciones bit a bit en valores de campo y puede resultar útil cuando necesita comprobar el estado de los bits individuales dentro de un valor numérico.

**Parámetros**
+ `field`: el nombre del campo numérico en el que se va a realizar la operación bit a bit.
+ `value`: la máscara de bits numérica que especifica los bits que se deben comprobar o una lista de las posiciones de los bits que se van a comprobar. Una máscara de bits numérica puede tener una forma binaria (0b...), decimal, hexadecimal (0x...), octal (0o...) o binaria (). BinData En una lista de posiciones de bits, la posición del bit menos significativo es 0.

## Ejemplo (MongoDB Shell)
<a name="bitsAllSet-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$bitsAllSet` operador para buscar documentos en los que el `flags` campo tenga todos los bits especificados por la máscara de bits.

**Cree documentos de muestra**

```
db.collection.insert([
  { _id: 1, flags: 0b1010 },
  { _id: 2, flags: 0b1100 },
  { _id: 3, flags: 0b1110 }
])
```

**Ejemplo de consulta**

```
db.collection.find({ flags: { $bitsAllSet: 0b1100 } })
```

**Salida**

```
{ "_id": 2, "flags": 12 },
{ "_id": 3, "flags": 14 }
```

En este ejemplo, la consulta busca documentos en los que el `flags` campo tenga establecidos todos los bits especificados por la máscara de bits `0b1100` (que representa el valor decimal 12). Los documentos con `_id` 2 y 3 cumplen este criterio, ya que sus valores de `flags` campo tienen configurados todos los bits necesarios (el tercero y el cuarto bits menos significativos).

## Ejemplos de código
<a name="bitsAllSet-code"></a>

Para ver un ejemplo de código para usar el `$bitsAllSet` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findWithBitsAllSet() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('collection');

  const result = await collection.find({ flags: { $bitsAllSet: 0b1100 } }).toArray();
  console.log(result);

  await client.close();
}

findWithBitsAllSet();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_with_bits_all_set():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.collection

    result = list(collection.find({ 'flags': { '$bitsAllSet': 0b1100 } }))
    print(result)

    client.close()

find_with_bits_all_set()
```

------

# \$1bitsAnyClear
<a name="bitsAnyClear"></a>

El `$bitsAnyClear` operador de Amazon DocumentDB se utiliza para hacer coincidir los documentos en los que se borra alguno de los bits especificados de un campo (establecido en 0). Esto puede resultar útil para realizar operaciones bit a bit en valores de campo almacenados en documentos.

**Parámetros**
+ `field`: El campo que se va a comprobar.
+ `value`: la máscara de bits numérica que especifica los bits que se deben comprobar o una lista de las posiciones de los bits que se van a comprobar. Una máscara de bits numérica puede tener una forma binaria (0b...), decimal, hexadecimal (0x...), octal (0o...) o binaria (). BinData En una lista de posiciones de bits, la posición del bit menos significativo es 0.

## Ejemplo (MongoDB Shell)
<a name="bitsAnyClear-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$bitsAnyClear` operador para comprobar si algún bit está despejado en el `status` campo de la `items` colección.

**Cree documentos de muestra**

```
db.items.insertMany([
  { "_id": 1, "status": 7 },
  { "_id": 2, "status": 15 },
  { "_id": 3, "status": 31 }
]);
```

**Ejemplo de consulta**

```
db.items.find({ "status": { $bitsAnyClear: 8 } })
```

**Salida**

```
{ "_id" : 1, "status" : 7 }
```

En este ejemplo, la consulta busca documentos en los que el `status` campo tenga algún bit libre (0) en la máscara de bits `8` (binario`1000`). El documento con `status` valores de `7` (binario`111`) coincide con la consulta, ya que tiene al menos un bit libre en la máscara de bits proporcionada. El bit transparente coincidente es el cuarto bit menos significativo.

## Ejemplos de código
<a name="bitsAnyClear-code"></a>

Para ver un ejemplo de código para usar el `$bitsAnyClear` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('items');

  const result = await collection.find({ "status": { $bitsAnyClear: 8 } }).toArray();
  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.items

    result = list(collection.find({ "status": { "$bitsAnyClear": 8 } }))
    print(result)

    client.close()

example()
```

------

# \$1bitsAnySet
<a name="bitsAnySet"></a>

El `$bitsAnySet` operador de Amazon DocumentDB se utiliza para consultar documentos en los que al menos un bit está establecido en 1 en los bits especificados de un campo. Este operador le permite realizar operaciones bit a bit en los valores almacenados en los campos, lo que permite realizar consultas y análisis eficientes de datos con características bit a bit.

**Parámetros**
+ `field`: el nombre del campo al que se va a aplicar la operación bit a bit.
+ `value`: la máscara de bits numérica que especifica los bits que se deben comprobar o una lista de las posiciones de los bits que se van a comprobar. Una máscara de bits numérica puede tener una forma binaria (0b...), decimal, hexadecimal (0x...), octal (0o...) o binaria (). BinData En una lista de posiciones de bits, la posición del bit menos significativo es 0.

## Ejemplo (MongoDB Shell)
<a name="bitsAnySet-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$bitsAnySet` operador para buscar documentos en los que haya al menos un bit establecido en el `flags` campo.

**Cree documentos de muestra**

```
db.collection.insertMany([
  { _id: 1, flags: 0b1010 },
  { _id: 2, flags: 0b1100 },
  { _id: 3, flags: 0b0011 },
  { _id: 4, flags: 0b0100 }
]);
```

**Ejemplo de consulta**

```
db.collection.find({
  flags: { $bitsAnySet: 0b1010 }
})
```

**Salida**

```
{ "_id" : 1, "flags" : 10 }
{ "_id" : 2, "flags" : 12 }
{ "_id" : 3, "flags" : 3 }
```

La consulta devuelve los documentos en los que al menos uno de los bits especificados en la máscara de bits `0b1010` está establecido en el `flags` campo.

## Ejemplos de código
<a name="bitsAnySet-code"></a>

Para ver un ejemplo de código para usar el `$bitsAnySet` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('collection');

  const result = await collection.find({
    flags: { $bitsAnySet: 0b1010 }
  }).toArray();

  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
collection = db['collection']

result = list(collection.find({
    'flags': { '$bitsAnySet': 0b1010 }
}))

print(result)

client.close()
```

------

# \$1comment
<a name="comment"></a>

El `$comment` operador de Amazon DocumentDB se utiliza para adjuntar un comentario a una consulta. Esto puede resultar útil para proporcionar contexto o información adicional sobre la consulta, lo que puede resultar útil para la depuración o la documentación. El comentario adjunto aparecerá como parte del resultado de operaciones como db.currentOp ().

**Parámetros**
+ `string`: El comentario adjunto a la consulta.

## Ejemplo (MongoDB Shell)
<a name="comment-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$comment` operador en Amazon DocumentDB.

**Cree documentos de muestra**

```
db.users.insertMany([
  { name: "John Doe", age: 30, email: "john.doe@example.com" },
  { name: "Jane Smith", age: 25, email: "jane.smith@example.com" },
  { name: "Bob Johnson", age: 35, email: "bob.johnson@example.com" }
]);
```

**Ejemplo de consulta**

```
db.users.find({ age: { $gt: 25 } }, { _id: 0, name: 1, age: 1 }).comment("Retrieve users older than 25");
```

**Salida**

```
{ "name" : "John Doe", "age" : 30 }
{ "name" : "Bob Johnson", "age" : 35 }
```

## Ejemplos de código
<a name="comment-code"></a>

Para ver un ejemplo de código para usar el `$comment` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const users = db.collection('users');

  const result = await users.find({ age: { $gt: 25 } }, { projection: { _id: 0, name: 1, age: 1 } })
                           .comment('Retrieve users older than 25')
                           .toArray();

  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def main():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    users = db.users

    result = list(users.find({ 'age': { '$gt': 25 }}, { '_id': 0, 'name': 1, 'age': 1 })
                .comment('Retrieve users older than 25'))

    print(result)

    client.close()

if __name__ == '__main__':
    main()
```

------

# \$1elemMatch
<a name="elemMatch"></a>

El `$elemMatch` operador de Amazon DocumentDB se utiliza para consultar un campo de matriz y devolver documentos en los que al menos un elemento de la matriz coincide con los criterios especificados. Este operador resulta especialmente útil cuando tiene estructuras de datos complejas con matrices anidadas o documentos incrustados.

La versión 2.0 de Planner agregó compatibilidad con índices para. `$elemMatch`

**Parámetros**
+ `field`: El campo de matriz que se va a consultar.
+ `query`: Los criterios que deben compararse con los elementos de la matriz.

 

**Utilización `$elemMatch` dentro de una `$all` expresión**

Consulte [Uso de `$elemMatch` dentro de una expresión `$all`](functional-differences.md#functional-differences.elemMatch) las limitaciones relacionadas con el uso del `$elemMatch` operador en una `$all` expresión.

## Ejemplo (MongoDB Shell)
<a name="elemMatch-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$elemMatch` operador para buscar documentos en los que la `parts` matriz tenga al menos un elemento que coincida con los criterios especificados.

**Cree documentos de muestra**

```
db.col.insertMany([
  { _id: 1, parts: [{ part: "xyz", qty: 10 }, { part: "abc", qty: 20 }] },
  { _id: 2, parts: [{ part: "xyz", qty: 5 }, { part: "abc", qty: 10 }] },
  { _id: 3, parts: [{ part: "xyz", qty: 15 }, { part: "abc", qty: 100 }] },
  { _id: 4, parts: [{ part: "abc", qty: 150 }] }
]);
```

**Ejemplo de consulta**

```
db.col.find({
  parts: { "$elemMatch": { part: "xyz", qty: { $lt: 11 } } }
})
```

**Salida**

```
{ "_id" : 1, "parts" : [ { "part" : "xyz", "qty" : 10 }, { "part" : "abc", "qty" : 20 } ] }
{ "_id" : 2, "parts" : [ { "part" : "xyz", "qty" : 5 }, { "part" : "abc", "qty" : 10 } ] }
```

## Ejemplos de código
<a name="elemMatch-code"></a>

Para ver un ejemplo de código para usar el `$elemMatch` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const col = db.collection('col');

  const result = await col.find({
    parts: { 
      "$elemMatch": { part: "xyz", qty: { $lt: 11 } } 
    }
  }).toArray();

  console.log(JSON.stringify(result, null, 2));
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    col = db['col']

    result = list(col.find({
      'parts': { 
        '$elemMatch': {'part': 'xyz', 'qty': {'$lt': 11}} 
      }
    }))

    print(result)
    client.close()

example()
```

------

# \$1eq
<a name="eq"></a>

El `$eq` operador de Amazon DocumentDB se utiliza para hacer coincidir documentos en los que el valor de un campo es igual al valor especificado. Este operador se utiliza habitualmente en el `find()` método para recuperar documentos que cumplen los criterios especificados.

**Parámetros**
+ `field`: el campo para comprobar la condición de igualdad.
+ `value`: el valor que se va a comparar con el campo.

## Ejemplo (MongoDB Shell)
<a name="eq-examples"></a>

El siguiente ejemplo demuestra el uso del `$eq` operador para buscar todos los documentos en los que el `name` campo es igual a. `"Thai Curry Palace"`

**Cree documentos de muestra**

```
db.restaurants.insertMany([
  { name: "Thai Curry Palace", cuisine: "Thai", features: ["Private Dining"] },
  { name: "Italian Bistro", cuisine: "Italian", features: ["Outdoor Seating"] },
  { name: "Mexican Grill", cuisine: "Mexican", features: ["Takeout"] }
]);
```

**Ejemplo de consulta**

```
db.restaurants.find({ name: { $eq: "Thai Curry Palace" } });
```

**Salida**

```
{ "_id" : ObjectId("68ee586f916df9d39f3d9414"), "name" : "Thai Curry Palace", "cuisine" : "Thai", "features" : [ "Private Dining" ] }
```

## Ejemplos de código
<a name="eq-code"></a>

Para ver un ejemplo de código para usar el `$eq` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findByName(name) {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('restaurants');

  const results = await collection.find({ name: { $eq: name } }).toArray();
  console.log(results);

  await client.close();
}

findByName("Thai Curry Palace");
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_by_name(name):
    client = MongoClient("mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false")
    db = client["test"]
    collection = db["restaurants"]

    results = list(collection.find({ "name": { "$eq": name } }))
    print(results)

    client.close()

find_by_name("Thai Curry Palace")
```

------

# \$1exists
<a name="exists"></a>

El `$exists` operador se utiliza para comprobar si un campo existe en un documento o no. `$exists`resulta especialmente útil cuando se trabaja con índices dispersos en Amazon DocumentDB, donde el campo indexado puede no estar presente en todos los documentos.

Para utilizar un índice disperso que haya creado en una consulta, debe utilizar la cláusula `$exists` en los campos incluidos en el índice. Si lo omite`$exists`, Amazon DocumentDB no utilizará el índice disperso para la consulta.

**Parámetros**
+ `field`: el nombre del campo para comprobar su existencia.
+ `value`: un valor booleano (`true`o`false`) que especifica si el campo debe existir (`true`) o no existir (`false`) en los documentos coincidentes.

## Ejemplo (MongoDB Shell)
<a name="exists-examples"></a>

El siguiente ejemplo demuestra el uso del `$exists` operador con un índice disperso en el `special_diets` campo de la colección. `food`

**Cree documentos de muestra**

```
db.food.insertMany([
  { _id: 1, name: "Apple", special_diets: ["vegetarian", "gluten-free"] },
  { _id: 2, name: "Broccoli" },
  { _id: 3, name: "Chicken", special_diets: ["dairy-free"] }
]);
```

**Cree un índice disperso en el campo `special\$1diets`**

```
db.food.createIndex({ "special_diets": 1 }, { sparse: true, name: "special_diets_sparse_asc" });
```

**Ejemplo de consulta**

```
db.food.find({ "special_diets": { $exists: true } });
```

**Salida**

```
[
  { "_id" : 1, "name" : "Apple", "special_diets" : [ "vegetarian", "gluten-free" ] },
  { "_id" : 3, "name" : "Chicken", "special_diets" : [ "dairy-free" ] }
]
```

## Ejemplos de código
<a name="exists-code"></a>

Para ver un ejemplo de código para usar el `$exists` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('food');

  const result = await collection.find({ "special_diets": { $exists: true } }).toArray();
  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

```
import pymongo

client = pymongo.MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
collection = db['food']

result = list(collection.find({"special_diets": {"$exists": True}}))
print(result)

client.close()
```

------

# \$1expr
<a name="expr"></a>

Nuevo a partir de la versión 4.0.

No es compatible con el clúster de Elastic.

El `$expr` operador de Amazon DocumentDB le permite utilizar expresiones de agregación en el lenguaje de consulta. Le permite realizar comparaciones y cálculos complejos en los campos de un documento, de forma similar a como utilizaría las etapas del proceso de agregación.

**Parámetros**
+ `expression`: expresión que devuelve un valor booleano, lo que permite realizar comparaciones y cálculos en los campos del documento.

## Ejemplo (MongoDB Shell)
<a name="expr-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$expr` operador para buscar todos los documentos en los que el `manufacturingCost` campo es mayor que el `price` campo.

**Cree documentos de muestra**

```
db.inventory.insertMany([
  { item: "abc", manufacturingCost: 500, price: 100 },
  { item: "def", manufacturingCost: 300, price: 450 },
  { item: "ghi", manufacturingCost: 400, price: 120 }
]);
```

**Ejemplo de consulta**

```
db.inventory.find({
  $expr: {
    $gt: ["$manufacturingCost", "$price"]
  }
})
```

**Salida**

```
{ "_id" : ObjectId("60b9d4d68d2cac581bc5a89a"), "item" : "abc", "manufacturingCost" : 500, "price" : 100 },
{ "_id" : ObjectId("60b9d4d68d2cac581bc5a89c"), "item" : "ghi", "manufacturingCost" : 400, "price" : 120 }
```

## Ejemplos de código
<a name="expr-code"></a>

Para ver un ejemplo de código para usar el `$expr` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('inventory');

  const result = await collection.find({
    $expr: {
      $gt: ['$manufacturingCost', '$price']
    }
  }).toArray();

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['inventory']

    result = list(collection.find({
        '$expr': {
            '$gt': ['$manufacturingCost', '$price']
        }
    }))

    print(result)
    client.close()

example()
```

------

# \$1gt
<a name="gt"></a>

El `$gt` operador de Amazon DocumentDB se utiliza para seleccionar documentos en los que el valor del campo especificado es mayor que el valor especificado. Este operador es útil para filtrar y consultar datos en función de comparaciones numéricas.

**Parámetros**
+ `field`: El campo que se va a comparar.
+ `value`: El valor con el que se va a comparar.

## Ejemplo (MongoDB Shell)
<a name="gt-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$gt` operador para buscar todos los documentos en los que el `age` campo es mayor que 30.

**Cree documentos de muestra**

```
db.users.insertMany([
  { name: "John", age: 25 },
  { name: "Jane", age: 32 },
  { name: "Bob", age: 45 },
  { name: "Alice", age: 28 }
]);
```

**Ejemplo de consulta**

```
db.users.find({ age: { $gt: 30 } });
```

**Salida**

```
{ "_id" : ObjectId("6249e5c22a5d39884a0a0001"), "name" : "Jane", "age" : 32 },
{ "_id" : ObjectId("6249e5c22a5d39884a0a0002"), "name" : "Bob", "age" : 45 }
```

## Ejemplos de código
<a name="gt-code"></a>

Para ver un ejemplo de código para usar el `$gt` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findUsersOlderThan30() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const users = await db.collection('users').find({ age: { $gt: 30 } }).toArray();
  console.log(users);
  await client.close();
}

findUsersOlderThan30();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_users_older_than_30():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    users = list(db.users.find({ 'age': { '$gt': 30 } }))
    print(users)
    client.close()

find_users_older_than_30()
```

------

# \$1gte
<a name="gte"></a>

El `$gte` operador de Amazon DocumentDB se utiliza para hacer coincidir valores superiores o iguales a un valor especificado. Este operador es útil para filtrar y consultar datos en función de comparaciones numéricas.

**Parámetros**
+ `field`: el campo que se va a comparar con el valor proporcionado.
+ `value`: el valor que se va a comparar con el campo.

## Ejemplo (MongoDB Shell)
<a name="gte-examples"></a>

El siguiente ejemplo muestra el uso del `$gte` operador en Amazon DocumentDB para buscar todos los documentos en los que el campo «edad» es mayor o igual a 25.

**Cree documentos de muestra**

```
db.users.insertMany([
  { _id: 1, name: "John", age: 20 },
  { _id: 2, name: "Jane", age: 25 },
  { _id: 3, name: "Bob", age: 30 },
  { _id: 4, name: "Alice", age: 35 }
]);
```

**Ejemplo de consulta**

```
db.users.find({ age: { $gte: 25 } }, { _id: 0, name: 1, age: 1 });
```

**Salida**

```
{ "name" : "Jane", "age" : 25 }
{ "name" : "Bob", "age" : 30 }
{ "name" : "Alice", "age" : 35 }
```

## Ejemplos de código
<a name="gte-code"></a>

Para ver un ejemplo de código para usar el `$gte` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findUsersAboveAge(age) {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const users = db.collection('users');

  const result = await users.find({ age: { $gte: age } }, { projection: { _id: 0, name: 1, age: 1 } }).toArray();
  console.log(result);

  await client.close();
}

findUsersAboveAge(25);
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_users_above_age(age):
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    users = db.users

    result = list(users.find({ 'age': { '$gte': age } }, { '_id': 0, 'name': 1, 'age': 1 }))
    print(result)

    client.close()

find_users_above_age(25)
```

------

# \$1in
<a name="in"></a>

El `$in` operador de Amazon DocumentDB es un operador de consulta lógico que le permite buscar documentos en los que el valor de un campo es igual a cualquiera de los valores especificados en una matriz.

**Parámetros**
+ `field`: el campo que se va a comparar con la matriz proporcionada.
+ `[value1, value2, ...]`: una matriz de valores para que coincidan con el campo especificado.

 

**Dollar (`$`) en los nombres de los campos**

Consulte las limitaciones [Dólar(\$1) y punto(.) en los nombres de campos](functional-differences.md#functional-differences-dollardot) relacionadas con la consulta de campos con `$` prefijo `$in` en objetos anidados.

## Ejemplo (MongoDB Shell)
<a name="in-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$in` operador para buscar documentos en los que el `color` campo es uno de los valores de la matriz proporcionada.

**Cree documentos de muestra**

```
db.colors.insertMany([
  { "_id": 1, "color": "red" },
  { "_id": 2, "color": "green" },
  { "_id": 3, "color": "blue" },
  { "_id": 4, "color": "yellow" },
  { "_id": 5, "color": "purple" }
])
```

**Ejemplo de consulta**

```
db.colors.find({ "color": { "$in": ["red", "blue", "purple"] } })
```

**Salida**

```
{ "_id": 1, "color": "red" },
{ "_id": 3, "color": "blue" },
{ "_id": 5, "color": "purple" }
```

## Ejemplos de código
<a name="in-code"></a>

Para ver un ejemplo de código para usar el `$in` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findByIn() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('colors');

  const result = await collection.find({ "color": { "$in": ["red", "blue", "purple"] } }).toArray();
  console.log(result);

  await client.close();
}

findByIn();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_by_in():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.colors

    result = list(collection.find({ "color": { "$in": ["red", "blue", "purple"] } }))
    print(result)

    client.close()

find_by_in()
```

------

# \$1jsonSchema
<a name="jsonSchema"></a>

Nuevo a partir de la versión 4.0.

No es compatible con el clúster de Elastic.

El `$jsonSchema` operador de Amazon DocumentDB se utiliza para filtrar documentos en función de un esquema JSON específico. Este operador le permite consultar documentos que coinciden con un esquema JSON concreto, lo que garantiza que los documentos recuperados cumplan con requisitos estructurales y de tipo de datos específicos.

Al utilizar el operador de consulta de `$jsonSchema` evaluación como parte de la creación de una colección, puede validar el esquema de los documentos que se van a insertar en la colección. Para obtener información adicional, consulte [Cómo utilizar la validación de esquemas JSON](json-schema-validation.md).

**Parámetros**
+ `required`(matriz): especifica los campos obligatorios del documento.
+ `properties`(objeto): define el tipo de datos y otras restricciones para cada campo del documento.

## Ejemplo (MongoDB Shell)
<a name="jsonSchema-examples"></a>

En el siguiente ejemplo se muestra el uso del `$jsonSchema` operador para filtrar la `employees` colección y recuperar únicamente los documentos que tengan los `age` campos `employeeId` y`name`, si el `employeeId` campo es del tipo. `string`

**Cree documentos de muestra**

```
db.employees.insertMany([
  { "name": { "firstName": "Carol", "lastName": "Smith" }, "employeeId": "1" },
  { "name": { "firstName": "Emily", "lastName": "Brown" }, "employeeId": "2", "age": 25 },
  { "name": { "firstName": "William", "lastName": "Taylor" }, "employeeId": 3, "age": 24 },
  { "name": { "firstName": "Jane", "lastName": "Doe" }, "employeeId": "4" }
]);
```

**Ejemplo de consulta**

```
db.employees.aggregate([
  { $match: {
    $jsonSchema: {
      required: ["name", "employeeId", "age"],
      properties: { "employeeId": { "bsonType": "string" } }
    }
  }}
]);
```

**Salida**

```
{ "_id" : ObjectId("6908e8b61f77fc26b2ecd26f"), "name" : { "firstName" : "Emily", "lastName" : "Brown" }, "employeeId" : "2", "age" : 25 }
```

## Ejemplos de código
<a name="jsonSchema-code"></a>

Para ver un ejemplo de código para usar el `$jsonSchema` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function filterByJsonSchema() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('employees');

  const result = await collection.aggregate([
    {
      $match: {
        $jsonSchema: {
          required: ['name', 'employeeId', 'age'],
          properties: { 'employeeId': { 'bsonType': 'string' } }
        }
      }
    }
  ]).toArray();

  console.log(result);
  await client.close();
}

filterByJsonSchema();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def filter_by_json_schema():
  client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
  db = client['test']
  collection = db['employees']

  result = list(collection.aggregate([
    {
      '$match': {
        '$jsonSchema': {
          'required': ['name', 'employeeId', 'age'],
          'properties': {'employeeId': {'bsonType': 'string'}}
        }
      }
    }
  ]))

  print(result)
  client.close()

filter_by_json_schema()
```

------

# \$1lt
<a name="lt"></a>

El `$lt` operador de Amazon DocumentDB se utiliza para hacer coincidir valores inferiores al valor especificado. Este operador es útil para filtrar y consultar datos en función de comparaciones numéricas.

**Parámetros**
+ `field`: el nombre del campo que se va a comprobar.
+ `value`: el valor con el que se va a comparar.

## Ejemplo (MongoDB Shell)
<a name="lt-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$lt` operador para recuperar documentos cuyo `Inventory.OnHand` valor es inferior a 50.

**Cree documentos de muestra**

```
db.example.insertMany([
  { "_id": 1, "Inventory": { "OnHand": 25, "Sold": 60 }, "Colors": ["Red", "Blue"] },
  { "_id": 2, "Inventory": { "OnHand": 75, "Sold": 40 }, "Colors": ["Red", "White"] },
  { "_id": 3, "Inventory": { "OnHand": 10, "Sold": 85 }, "Colors": ["Red", "Green"] }
]);
```

**Ejemplo de consulta**

```
db.example.find({ "Inventory.OnHand": { $lt: 50 } })
```

**Salida**

```
{ "_id" : 1, "Inventory" : { "OnHand" : 25, "Sold" : 60 }, "Colors" : [ "Red", "Blue" ] }
{ "_id" : 3, "Inventory" : { "OnHand" : 10, "Sold" : 85 }, "Colors" : [ "Red", "Green" ] }
```

## Ejemplos de código
<a name="lt-code"></a>

Para ver un ejemplo de código para usar el `$lt` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('example');

  const result = await collection.find({ "Inventory.OnHand": { $lt: 50 } }).toArray();
  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['example']

    result = list(collection.find({ "Inventory.OnHand": { "$lt": 50 } }))
    print(result)

    client.close()

example()
```

------

# \$1mod
<a name="mod-query"></a>

El operador de `$mod` consulta selecciona los documentos en los que un valor de campo dividido por un divisor tiene un resto especificado. Esto resulta útil para filtrar documentos en función de las condiciones aritméticas de los módulos.

**Parámetros**
+ `divisor`: el número por el que se va a dividir.
+ `remainder`: El valor restante esperado.

## Ejemplo (MongoDB Shell)
<a name="mod-query-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$mod` operador para buscar todos los pedidos en los que la cantidad es un número impar.

**Cree documentos de muestra**

```
db.orders.insertMany([
  { _id: 1, item: "Widget", quantity: 15 },
  { _id: 2, item: "Gadget", quantity: 20 },
  { _id: 3, item: "Tool", quantity: 7 },
  { _id: 4, item: "Device", quantity: 12 },
  { _id: 5, item: "Part", quantity: 9 }
]);
```

**Ejemplo de consulta**

```
db.orders.find({ quantity: { $mod: [2, 1] } });
```

**Salida**

```
{ "_id" : 1, "item" : "Widget", "quantity" : 15 }
{ "_id" : 3, "item" : "Tool", "quantity" : 7 }
{ "_id" : 5, "item" : "Part", "quantity" : 9 }
```

Esta consulta devuelve documentos en los que la cantidad dividida por 2 tiene un resto igual a 1, lo que permite seleccionar todas las cantidades impares.

## Ejemplos de código
<a name="mod-query-code"></a>

Para ver un ejemplo de código para usar el operador de `$mod` consulta, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('orders');

  const result = await collection.find({ quantity: { $mod: [2, 1] } }).toArray();

  console.log(JSON.stringify(result, null, 2));
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['orders']

    result = list(collection.find({'quantity': {'$mod': [2, 1]}}))

    print(result)
    client.close()

example()
```

------

# \$1lte
<a name="lte"></a>

El `$lte` operador de Amazon DocumentDB se utiliza para hacer coincidir documentos en los que el valor de un campo especificado es inferior o igual al valor especificado. Este operador es útil para filtrar y consultar datos en función de comparaciones numéricas.

**Parámetros**
+ `field`: El campo que se va a comparar.
+ `value`: El valor con el que se va a comparar.

## Ejemplo (MongoDB Shell)
<a name="lte-examples"></a>

El siguiente ejemplo demuestra el uso del `$lte` operador para recuperar documentos en los que el `quantity` campo es menor o igual a 10.

**Cree documentos de muestra**

```
db.inventory.insertMany([
  { item: "canvas", qty: 100 },
  { item: "paint", qty: 50 },
  { item: "brush", qty: 10 },
  { item: "paper", qty: 5 }
]);
```

**Ejemplo de consulta**

```
db.inventory.find({ qty: { $lte: 10 } });
```

**Salida**

```
{ "_id" : ObjectId("..."), "item" : "brush", "qty" : 10 },
{ "_id" : ObjectId("..."), "item" : "paper", "qty" : 5 }
```

## Ejemplos de código
<a name="lte-code"></a>

Para ver un ejemplo de código para usar el `$lte` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require("mongodb");

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db("test");
  const collection = db.collection("inventory");

  const result = await collection.find({ qty: { $lte: 10 } }).toArray();
  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def main():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client["test"]
    collection = db["inventory"]

    result = list(collection.find({ "qty": { "$lte": 10 } }))
    print(result)

    client.close()

if __name__ == "__main__":
    main()
```

------

# \$1meta
<a name="meta"></a>

El `$meta` operador se utiliza para acceder a los metadatos asociados a la ejecución de la consulta actual. Este operador se utiliza principalmente para las operaciones de búsqueda de texto, en las que los metadatos pueden proporcionar información sobre la relevancia de los documentos coincidentes.

**Parámetros**
+ `textScore`: recupera la puntuación de búsqueda de texto del documento. Esta puntuación indica la relevancia del documento para la consulta de búsqueda de texto.

## Ejemplo (MongoDB Shell)
<a name="meta-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$meta` operador para recuperar la puntuación de búsqueda de texto de los documentos que coinciden con una consulta de búsqueda de texto.

**Cree documentos de muestra**

```
db.documents.insertMany([
  { _id: 1, title: "Coffee Basics", content: "Coffee is a popular beverage made from roasted coffee beans." },
  { _id: 2, title: "Coffee Culture", content: "Coffee coffee coffee - the ultimate guide to coffee brewing and coffee preparation." },
  { _id: 3, title: "Tea vs Coffee", content: "Many people prefer tea over coffee for its health benefits." }
]);
```

**Crea un índice de texto**

```
db.documents.createIndex({ content: "text" });
```

**Ejemplo de consulta**

```
db.documents.find(
  { $text: { $search: "coffee" } },
  { _id: 0, title: 1, content: 1, score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } });
```

**Salida**

```
[
  {
    title: 'Coffee Culture',
    content: 'Coffee coffee coffee - the ultimate guide to coffee brewing and coffee preparation.',
    score: 0.8897688388824463
  },
  {
    title: 'Coffee Basics',
    content: 'Coffee is a popular beverage made from roasted coffee beans.',
    score: 0.75990891456604
  },
  {
    title: 'Tea vs Coffee',
    content: 'Many people prefer tea over coffee for its health benefits.',
    score: 0.6079270839691162
  }
]
```

## Ejemplos de código
<a name="meta-code"></a>

Para ver un ejemplo de código para usar el `$meta` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findWithTextScore() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('documents');

  const result = await collection.find(
    { $text: { $search: "coffee" } },
    { projection: { _id: 0, title: 1, content: 1, score: { $meta: "textScore" } } }
  ).sort({ score: { $meta: "textScore" } }).toArray();

  console.log(result);
  client.close();
}

findWithTextScore();
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
collection = db['documents']

for doc in collection.find(
    {'$text': {'$search': 'coffee'}},
    {'_id': 0, 'title': 1, 'content': 1, 'score': {'$meta': 'textScore'}}
).sort([('score', {'$meta': 'textScore'})]):
    print(doc)

client.close()
```

------

# \$1ne
<a name="ne"></a>

El `$ne` operador se utiliza para hacer coincidir documentos en los que el valor de un campo no es igual al valor especificado. Es un operador de comparación que se puede utilizar en los predicados de consulta para filtrar documentos.

La versión 2.0 de Planner agregó compatibilidad con índices para`$ne`.

**Parámetros**
+ `field`: El campo que se va a comprobar.
+ `value`: El valor con el que se debe realizar la comprobación.

## Ejemplo (MongoDB Shell)
<a name="ne-examples"></a>

En este ejemplo, buscaremos todos los documentos de la `users` colección en los que el `status` campo no es igual a. `"active"`

**Cree documentos de muestra**

```
db.users.insertMany([
  { name: "John", status: "active" },
  { name: "Jane", status: "inactive" },
  { name: "Bob", status: "suspended" },
  { name: "Alice", status: "active" }
]);
```

**Ejemplo de consulta**

```
db.users.find({ status: { $ne: "active" } });
```

**Salida**

```
[
  {
    _id: ObjectId('...'),
    name: 'Jane',
    status: 'inactive'
  },
  {
    _id: ObjectId('...'),
    name: 'Bob',
    status: 'suspended'
  }
]
```

## Ejemplos de código
<a name="ne-code"></a>

Para ver un ejemplo de código para usar el `$ne` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const users = db.collection('users');

  const result = await users.find({ status: { $ne: 'active' } }).toArray();
  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
users = db['users']

result = list(users.find({ 'status': { '$ne': 'active' } }))
print(result)

client.close()
```

------

# \$1nin
<a name="nin"></a>

El `$nin` operador se usa para hacer coincidir valores que no están en la matriz especificada. Es el inverso del `$in` operador, que coincide con los valores que están en la matriz especificada.

La versión 2.0 de Planner agregó compatibilidad con índices para`$nin`.

**Parámetros**
+ `field`: El campo que se va a comprobar.
+ `array`: El conjunto de valores con los que se va a realizar la comprobación.

 

**Dollar (`$`) en los nombres de los campos**

Consulte las limitaciones [Dólar(\$1) y punto(.) en los nombres de campos](functional-differences.md#functional-differences-dollardot) relacionadas con la consulta de campos con `$` prefijo `$nin` en objetos anidados.

## Ejemplo (MongoDB Shell)
<a name="nin-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$nin` operador para buscar documentos en los que el `category` campo no sea igual a «Ficción» o «Misterio».

**Cree documentos de muestra**

```
db.books.insertMany([
  { title: "The Great Gatsby", author: "F. Scott Fitzgerald", category: "Fiction" },
  { title: "To Kill a Mockingbird", author: "Harper Lee", category: "Fiction" },
  { title: "The Girl on the Train", author: "Paula Hawkins", category: "Mystery" },
  { title: "The Martian", author: "Andy Weir", category: "Science Fiction" },
  { title: "The Alchemist", author: "Paulo Coelho", category: "Philosophy" }
])
```

**Ejemplo de consulta**

```
db.books.find({
  category: {
    $nin: ["Fiction", "Mystery"]
  }
})
```

**Salida**

```
[
  {
    _id: ObjectId('...'),
    title: 'The Martian',
    author: 'Andy Weir',
    category: 'Science Fiction'
  },
  {
    _id: ObjectId('...'),
    title: 'The Alchemist',
    author: 'Paulo Coelho',
    category: 'Philosophy'
  }
]
```

## Ejemplos de código
<a name="nin-code"></a>

Para ver un ejemplo de código para usar el `$nin` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findBooksNotInCategories(categories) {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const books = await db.collection('books').find({
    category: {
      $nin: categories
    }
  }).toArray();
  console.log(books);
  client.close();
}

findBooksNotInCategories(['Fiction', 'Mystery']);
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_books_not_in_categories(categories):
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    books = list(db.books.find({
        'category': {
            '$nin': categories
        }
    }))
    print(books)
    client.close()

find_books_not_in_categories(['Fiction', 'Mystery'])
```

------

# \$1nor
<a name="nor"></a>

El `$nor` operador se utiliza para hacer coincidir documentos en los que ninguna de las condiciones de consulta especificadas es verdadera. Es similar a la operación lógica «NOR», en la que el resultado es verdadero si ninguno de los operandos es verdadero.

**Parámetros**
+ `expression1`: la primera expresión que se va a evaluar.
+ `expression2`: La segunda expresión que se va a evaluar.
+ `expressionN`: Expresiones adicionales para evaluar.

## Ejemplo (MongoDB Shell)
<a name="nor-examples"></a>

El siguiente ejemplo demuestra el uso del `$nor` operador al recuperar documentos en los que el `qty` campo no es inferior a 20 ni igual a «XL». `size`

**Cree documentos de muestra**

```
db.items.insertMany([
  { qty: 10, size: "M" },
  { qty: 15, size: "XL" },
  { qty: 25, size: "L" },
  { qty: 30, size: "XL" }
])
```

**Ejemplo de consulta**

```
db.items.find({
  $nor: [
    { qty: { $lt: 20 } },
    { size: "XL" }
  ]
})
```

**Salida**

```
[
  { "_id" : ObjectId("..."), "qty" : 25, "size" : "L" }
]
```

## Ejemplos de código
<a name="nor-code"></a>

Para ver un ejemplo de código para usar el `$nor` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('items');

  const result = await collection.find({
    $nor: [
      { qty: { $lt: 20 } },
      { size: "XL" }
    ]
  }).toArray();

  console.log(result);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['items']

    result = list(collection.find({
        '$nor': [
            { 'qty': { '$lt': 20 } },
            { 'size': 'XL' }
        ]
    }))

    print(result)

    client.close()

example()
```

------

# \$1not
<a name="not"></a>

El `$not` operador se usa para negar el resultado de una expresión dada. Le permite seleccionar documentos en los que la condición especificada no coincide.

La versión 2.0 de Planner agregó compatibilidad con índices para `$not {eq}` y`$not {in}`.

**Parámetros**
+ `expression`: La expresión para negar.

## Ejemplo (MongoDB Shell)
<a name="not-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$not` operador para buscar documentos en los que el `status` campo no es igual a «activo».

**Cree documentos de muestra**

```
db.users.insertMany([
  { name: "John", status: "active" },
  { name: "Jane", status: "inactive" },
  { name: "Bob", status: "pending" },
  { name: "Alice", status: "active" }
]);
```

**Ejemplo de consulta**

```
db.users.find({ status: { $not: { $eq: "active" } } });
```

**Salida**

```
[
  {
    _id: ObjectId('...'),
    name: 'Jane',
    status: 'inactive'
  },
  {
    _id: ObjectId('...'),
    name: 'Bob',
    status: 'pending'
  }
]
```

## Ejemplos de código
<a name="not-code"></a>

Para ver un ejemplo de código para usar el `$not` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient, Filters } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('users');

  const result = await collection.find({
    status: { $not: { $eq: "active" } }
  }).toArray();

  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient
from bson.son import SON

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
collection = db['users']

result = collection.find({
    "status": {"$not": {"$eq": "active"}}
})

for doc in result:
    print(doc)

client.close()
```

------

# \$1or
<a name="or"></a>

El `$or` operador se utiliza para realizar una operación OR lógica en una matriz de dos o más expresiones. Devuelve documentos que coinciden con al menos una de las expresiones. Este operador resulta útil cuando necesita consultar documentos que cumplan una de varias condiciones.

**Parámetros**
+ `expression1`: la primera expresión que se va a evaluar.
+ `expression2`: La segunda expresión a evaluar.
+ `...`: Expresiones adicionales para evaluar (opcional).

## Ejemplo (MongoDB Shell)
<a name="or-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$or` operador para buscar documentos en los que `make` es "TruckForYou" con el modelo «Heavy H1" oSportForYou"» con el modelo «Bolid 1".

**Cree documentos de muestra**

```
db.cars.insertMany([
  { make: "TruckForYou", model: "Heavy H1", year: 2020 },
  { make: "SportForYou", model: "Bolid 1", year: 2021 },
  { make: "TruckForYou", model: "Cargo 5", year: 2019 },
  { make: "SportForYou", model: "Racer 2", year: 2022 }
]);
```

**Ejemplo de consulta**

```
db.cars.find({
  $or: [
    { make: "TruckForYou", model: "Heavy H1" },
    { make: "SportForYou", model: "Bolid 1" }
  ]
});
```

**Salida**

```
[
  {
    _id: ObjectId('...'),
    make: 'TruckForYou',
    model: 'Heavy H1',
    year: 2020
  },
  {
    _id: ObjectId('...'),
    make: 'SportForYou',
    model: 'Bolid 1',
    year: 2021
  }
]
```

## Ejemplos de código
<a name="or-code"></a>

Para ver un ejemplo de código para usar el `$or` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findCarsByMakeModel() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const cars = db.collection('cars');

  const result = await cars.find({
    $or: [
      { make: "TruckForYou", model: "Heavy H1" },
      { make: "SportForYou", model: "Bolid 1" }
    ]
  }).toArray();

  console.log(result);
  client.close();
}

findCarsByMakeModel();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_cars_by_make_model():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    cars = db.cars

    result = list(cars.find({
        '$or': [
            {'make': 'TruckForYou', 'model': 'Heavy H1'},
            {'make': 'SportForYou', 'model': 'Bolid 1'}
        ]
    }))

    print(result)
    client.close()

find_cars_by_make_model()
```

------

# \$1regex
<a name="regex"></a>

El `$regex` operador le permite realizar coincidencias de expresiones regulares en campos de cadenas. Es una potente herramienta para buscar y filtrar documentos en función de patrones complejos.

**Parámetros**
+ `regular expression`: El patrón de expresión regular que se debe comparar con el campo.
+ `$options`: (opcional) Ofrece opciones para modificar el comportamiento de búsqueda, como distinguir entre mayúsculas y minúsculas, la coincidencia global, etc.

## Ejemplo (MongoDB Shell)
<a name="regex-examples"></a>

El siguiente ejemplo demuestra el uso del `$regex` operador para buscar documentos en los que el campo «nombre» coincide con un patrón específico.

**Cree documentos de muestra**

```
db.users.insertMany([
  { name: "John Doe" },
  { name: "Jane Smith" },
  { name: "Alice Johnson" },
  { name: "Bob Williams" },
  { name: "Charlie Davis" }
]);
```

**Ejemplo de consulta**

```
db.users.find({ name: { $regex: /^A/ } })
```

**Salida**

```
[
  { "_id" : ObjectId("..."), "name" : "Alice Johnson" }
]
```

Esta consulta devolverá todos los documentos en los que el campo «nombre» comience por la letra «A».

## Ejemplos de código
<a name="regex-code"></a>

Para ver un ejemplo de código para usar el `$regex` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('users');

  const results = await collection.find({ name: { $regex: /^A/ } }).toArray();
  console.log(results);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def main():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['users']

    results = list(collection.find({ 'name': { '$regex': '^A' } }))
    print(results)

    client.close()

if __name__ == "__main__":
    main()
```

------

# \$1slice
<a name="slice-projection"></a>

El operador `$slice` de proyección limita el número de elementos de matriz devueltos en el resultado de una consulta. Permite recuperar un número específico de elementos desde el principio o el final de un campo de matriz sin cargar toda la matriz.

**Parámetros**
+ `field`: El campo de matriz que se va a proyectar.
+ `count`: Número de elementos que se van a devolver. Los valores positivos devuelven los elementos desde el principio y los negativos desde el final.

## Ejemplo (MongoDB Shell)
<a name="slice-projection-examples"></a>

El siguiente ejemplo muestra cómo utilizar el operador de `$slice` proyección para devolver solo los dos primeros elementos de un campo matricial.

**Cree documentos de muestra**

```
db.inventory.insertMany([
  { _id: 1, item: "notebook", tags: ["office", "school", "supplies", "writing"] },
  { _id: 2, item: "pen", tags: ["office", "writing"] },
  { _id: 3, item: "folder", tags: ["office", "supplies", "storage", "organization"] }
]);
```

**Ejemplo de consulta**

```
db.inventory.find(
  {},
  { item: 1, tags: { $slice: 2 } }
)
```

**Salida**

```
{ "_id" : 1, "item" : "notebook", "tags" : [ "office", "school" ] }
{ "_id" : 2, "item" : "pen", "tags" : [ "office", "writing" ] }
{ "_id" : 3, "item" : "folder", "tags" : [ "office", "supplies" ] }
```

## Ejemplos de código
<a name="slice-projection-code"></a>

Para ver un ejemplo de código para usar el operador de `$slice` proyección, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('inventory');

  const result = await collection.find(
    {},
    { projection: { item: 1, tags: { $slice: 2 } } }
  ).toArray();

  console.log(JSON.stringify(result, null, 2));
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['inventory']

    result = list(collection.find(
        {},
        {'item': 1, 'tags': {'$slice': 2}}
    ))

    print(result)
    client.close()

example()
```

------

# \$1size
<a name="size-query"></a>

El operador de `$size` consulta hace coincidir los documentos en los que un campo de matriz tiene exactamente el número de elementos especificado. Esto resulta útil para filtrar documentos en función de la longitud de la matriz.

**Parámetros**
+ `field`: El campo de matriz que se va a comprobar.
+ `count`: El número exacto de elementos que debe contener la matriz.

## Ejemplo (MongoDB Shell)
<a name="size-query-examples"></a>

En el siguiente ejemplo, se muestra el uso `$size` del operador para buscar todos los productos que tienen exactamente tres etiquetas.

**Cree documentos de muestra**

```
db.products.insertMany([
  { _id: 1, name: "Laptop", tags: ["electronics", "computers", "portable"] },
  { _id: 2, name: "Mouse", tags: ["electronics", "accessories"] },
  { _id: 3, name: "Desk", tags: ["furniture", "office", "workspace"] },
  { _id: 4, name: "Monitor", tags: ["electronics"] }
]);
```

**Ejemplo de consulta**

```
db.products.find({ tags: { $size: 3 } });
```

**Salida**

```
{ "_id" : 1, "name" : "Laptop", "tags" : [ "electronics", "computers", "portable" ] }
{ "_id" : 3, "name" : "Desk", "tags" : [ "furniture", "office", "workspace" ] }
```

## Ejemplos de código
<a name="size-query-code"></a>

Para ver un ejemplo de código para usar el operador de `$size` consulta, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('products');

  const result = await collection.find({ tags: { $size: 3 } }).toArray();

  console.log(JSON.stringify(result, null, 2));
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['products']

    result = list(collection.find({'tags': {'$size': 3}}))

    print(result)
    client.close()

example()
```

------

# \$1text
<a name="text"></a>

El `$text` operador se utiliza para realizar búsquedas de texto completo en campos indexados de texto dentro de una colección de documentos. Este operador permite buscar documentos que contengan palabras o frases específicas y se puede combinar con otros operadores de consulta para filtrar los resultados en función de criterios adicionales.

**Parámetros**
+ `$search`: la cadena de texto que se va a buscar.

## Ejemplo (MongoDB Shell)
<a name="text-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$text` operador para buscar documentos que contengan la palabra «interés» y filtrar los resultados en función del campo «star\$1rating».

**Cree documentos de muestra**

```
db.test.insertMany([
  { "_id": 1, "star_rating": 4, "comments": "apple is red" },
  { "_id": 2, "star_rating": 5, "comments": "pie is delicious" },
  { "_id": 3, "star_rating": 3, "comments": "apples, oranges - healthy fruit" },
  { "_id": 4, "star_rating": 2, "comments": "bake the apple pie in the oven" },
  { "_id": 5, "star_rating": 5, "comments": "interesting couch" },
  { "_id": 6, "star_rating": 5, "comments": "interested in couch for sale, year 2022" }
]);
```

**Crea un índice de texto**

```
db.test.createIndex({ comments: "text" });
```

**Ejemplo de consulta**

```
db.test.find({$and: [{star_rating: 5}, {$text: {$search: "interest"}}]})
```

**Salida**

```
{ "_id" : 5, "star_rating" : 5, "comments" : "interesting couch" }
{ "_id" : 6, "star_rating" : 5, "comments" : "interested in couch for sale, year 2022" }
```

El comando anterior devuelve documentos con un campo indexado en texto que contiene cualquier tipo de «interés» y una «calificación por estrellas» igual a 5.

## Ejemplos de código
<a name="text-code"></a>

Para ver un ejemplo de código para usar el `$text` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function searchDocuments() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('test');

  const result = await collection.find({
    $and: [
      { star_rating: 5 },
      { $text: { $search: 'interest' } }
    ]
  }).toArray();

  console.log(result);
  client.close();
}

searchDocuments();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def search_documents():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db.test

    result = list(collection.find({
        '$and': [
            {'star_rating': 5},
            {'$text': {'$search': 'interest'}}
        ]
    }))

    print(result)
    client.close()

search_documents()
```

------

# \$1type
<a name="type"></a>

El `$type` operador se utiliza para comprobar el tipo de datos de un campo de un documento. Se puede utilizar cuando se necesitan operaciones o validaciones de un tipo específico. El `$type` operador devuelve el tipo BSON de la expresión evaluada. El tipo devuelto es una cadena, que corresponde al tipo de campo o expresión.

La versión 2.0 de Planner agregó compatibilidad con índices para`$type`.

**Parámetros**
+ `expression`: La expresión que se va a evaluar.

## Ejemplo (MongoDB Shell)
<a name="type-examples"></a>

**Cree documentos de muestra**

```
db.documents.insertMany([
  { _id: 1, name: "John", age: 30, email: "john@example.com" },
  { _id: 2, name: "Jane", age: "25", email: 123456 },
  { _id: 3, name: 123, age: true, email: null }
]);
```

**Ejemplo de consulta**

```
db.documents.find({
  $or: [
    { age: { $type: "number" } },
    { email: { $type: "string" } },
    { name: { $type: "string" } }
  ]
})
```

**Salida**

```
[
  { "_id": 1, "name": "John", "age": 30, "email": "john@example.com" },
  { "_id": 2, "name": "Jane", "age": "25", "email": 123456 }
]
```

Esta consulta devolverá los documentos en los que el `age` campo es del tipo «número», el `email` campo es del tipo «cadena» y el `name` campo es del tipo «cadena».

## Ejemplos de código
<a name="type-code"></a>

Para ver un ejemplo de código para usar el `$type` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function findByType() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('documents');

  const results = await collection.find({
    $or: [
      { age: { $type: 'number' } },
      { email: { $type: 'string' } },
      { name: { $type: 'string' } }
    ]
  }).toArray();

  console.log(results);
  client.close();
}

findByType();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def find_by_type():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['documents']

    results = list(collection.find({
        '$or': [
            {'age': {'$type': 'number'}},
            {'email': {'$type': 'string'}},
            {'name': {'$type': 'string'}}
        ]
    }))

    print(results)
    client.close()

find_by_type()
```

------

# Operadores de actualización
<a name="mongo-apis-update-operators"></a>

En esta sección se proporciona información detallada sobre los operadores de actualización compatibles con Amazon DocumentDB.

**Topics**
+ [\$1](dollar-update.md)
+ [\$1[]](dollarBrackets-update.md)
+ [\$1[<identifier>]](dollarIdentifier-update.md)
+ [\$1addToSet](addToSet.md)
+ [\$1bit](bit.md)
+ [\$1currentDate](currentDate.md)
+ [\$1each](each.md)
+ [\$1inc](inc.md)
+ [\$1max](max-update.md)
+ [\$1min](min-update.md)
+ [\$1mul](mul.md)
+ [\$1pop](pop.md)
+ [\$1position](position.md)
+ [\$1pull](pull.md)
+ [\$1pullAll](pullAll.md)
+ [\$1push](push.md)
+ [\$1rename](rename.md)
+ [\$1set](set-update.md)
+ [\$1setOnInsert](setOnInsert.md)
+ [\$1slice](slice-update.md)
+ [\$1sort](sort-update.md)
+ [\$1unset](unset-update.md)

# \$1
<a name="dollar-update"></a>

El operador `$` posicional actualiza el primer elemento de la matriz que coincide con la condición de consulta. Actúa como marcador de posición para la posición del elemento de matriz coincidente.

**Parámetros**
+ `field.$`: El campo de matriz con el operador posicional para actualizar el primer elemento coincidente.

## Ejemplo (MongoDB Shell)
<a name="dollar-update-examples"></a>

El siguiente ejemplo demuestra el uso del operador `$` posicional para actualizar un elemento de matriz específico.

**Cree documentos de muestra**

```
db.inventory.insertMany([
  { _id: 1, item: "Widget", quantities: [10, 20, 30] },
  { _id: 2, item: "Gadget", quantities: [5, 15, 25] }
]);
```

**Ejemplo de consulta**

```
db.inventory.updateOne(
  { _id: 1, quantities: 20 },
  { $set: { "quantities.$": 22 } }
);
```

**Salida**

```
{
  "_id" : 1,
  "item" : "Widget",
  "quantities" : [ 10, 22, 30 ]
}
```

## Ejemplos de código
<a name="dollar-update-code"></a>

Para ver un ejemplo de código para usar el operador `$` posicional, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function updateDocument() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('inventory');

  await collection.updateOne(
    { _id: 1, quantities: 20 },
    { $set: { "quantities.$": 22 } }
  );

  const updatedDocument = await collection.findOne({ _id: 1 });
  console.log(updatedDocument);

  await client.close();
}

updateDocument();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def update_document():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.inventory

    collection.update_one(
        {'_id': 1, 'quantities': 20},
        {'$set': {'quantities.$': 22}}
    )

    updated_document = collection.find_one({'_id': 1})
    print(updated_document)

    client.close()

update_document()
```

------

# \$1[]
<a name="dollarBrackets-update"></a>

El operador `$[]` all positional actualiza todos los elementos de una matriz. Se utiliza cuando se necesita modificar todos los elementos de un campo de matriz.

**Parámetros**
+ `field.$[]`: El campo de matriz con el operador totalmente posicional para actualizar todos los elementos.

## Ejemplo (MongoDB Shell)
<a name="dollarBrackets-update-examples"></a>

El siguiente ejemplo demuestra el uso del `$[]` operador para actualizar todos los elementos de la matriz.

**Cree documentos de muestra**

```
db.products.insertOne({
  _id: 1,
  name: "Laptop",
  prices: [1000, 1100, 1200]
});
```

**Ejemplo de consulta**

```
db.products.updateOne(
  { _id: 1 },
  { $inc: { "prices.$[]": 50 } }
);
```

**Salida**

```
{
  "_id" : 1,
  "name" : "Laptop",
  "prices" : [ 1050, 1150, 1250 ]
}
```

## Ejemplos de código
<a name="dollarBrackets-update-code"></a>

Para ver un ejemplo de código para usar el `$[]` operador, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function updateDocument() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('products');

  await collection.updateOne(
    { _id: 1 },
    { $inc: { "prices.$[]": 50 } }
  );

  const updatedDocument = await collection.findOne({ _id: 1 });
  console.log(updatedDocument);

  await client.close();
}

updateDocument();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def update_document():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.products

    collection.update_one(
        {'_id': 1},
        {'$inc': {'prices.$[]': 50}}
    )

    updated_document = collection.find_one({'_id': 1})
    print(updated_document)

    client.close()

update_document()
```

------

# \$1[<identifier>]
<a name="dollarIdentifier-update"></a>

El operador posicional `$[<identifier>]` filtrado actualiza todos los elementos de la matriz que coinciden con las condiciones de filtro especificadas. Se utiliza con la `arrayFilters` opción de actualizar selectivamente los elementos de la matriz.

**Parámetros**
+ `field.$[identifier]`: El campo de matriz con el operador posicional filtrado.
+ `arrayFilters`: un conjunto de condiciones de filtro que determinan qué elementos se van a actualizar.

## Ejemplo (MongoDB Shell)
<a name="dollarIdentifier-update-examples"></a>

El siguiente ejemplo demuestra el uso del `$[<identifier>]` operador para actualizar elementos de matriz específicos en función de una condición.

**Cree documentos de muestra**

```
db.students.insertOne({
  _id: 1,
  name: "Alice",
  grades: [
    { subject: "Math", score: 85 },
    { subject: "Science", score: 92 },
    { subject: "History", score: 78 }
  ]
});
```

**Ejemplo de consulta**

```
db.students.updateOne(
  { _id: 1 },
  { $inc: { "grades.$[elem].score": 5 } },
  { arrayFilters: [{ "elem.score": { $gte: 80 } }] }
);
```

**Salida**

```
{
  "_id" : 1,
  "name" : "Alice",
  "grades" : [
    { "subject" : "Math", "score" : 90 },
    { "subject" : "Science", "score" : 97 },
    { "subject" : "History", "score" : 78 }
  ]
}
```

## Ejemplos de código
<a name="dollarIdentifier-update-code"></a>

Para ver un ejemplo de código para usar el `$[<identifier>]` operador, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function updateDocument() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('students');

  await collection.updateOne(
    { _id: 1 },
    { $inc: { "grades.$[elem].score": 5 } },
    { arrayFilters: [{ "elem.score": { $gte: 80 } }] }
  );

  const updatedDocument = await collection.findOne({ _id: 1 });
  console.log(updatedDocument);

  await client.close();
}

updateDocument();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def update_document():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.students

    collection.update_one(
        {'_id': 1},
        {'$inc': {'grades.$[elem].score': 5}},
        array_filters=[{'elem.score': {'$gte': 80}}]
    )

    updated_document = collection.find_one({'_id': 1})
    print(updated_document)

    client.close()

update_document()
```

------

# \$1addToSet
<a name="addToSet"></a>

El `$addToSet` operador de Amazon DocumentDB se utiliza para añadir un valor a una matriz solo si el valor aún no está presente en la matriz. Esto resulta útil para garantizar que una matriz contenga elementos únicos.

**Parámetros**
+ `field`: el campo que se va a actualizar.
+ `value`: el valor que se va a añadir al campo de matriz. Puede ser un valor único o una expresión.

## Ejemplo (MongoDB Shell)
<a name="addToSet-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$addToSet` operador para añadir elementos únicos a una matriz.

**Cree documentos de muestra**

```
db.products.insertMany([
  { "_id": 1, "item": "apple", "tags": ["fruit", "red", "round"] },
  { "_id": 2, "item": "banana", "tags": ["fruit", "yellow"] },
  { "_id": 3, "item": "cherry", "tags": ["fruit", "red"] }
])
```

**Ejemplo de consulta**

```
db.products.update(
  { "item": "apple" },
  { $addToSet: { "tags": "green" } }
)
```

**Salida**

```
{ "_id": 1, "item": "apple", "tags": ["fruit", "red", "round", "green"] }
```

En este ejemplo, el `$addToSet` operador añade la etiqueta «verde» a la matriz de «etiquetas» del documento, donde el campo «elemento» es «manzana». Como la palabra «verde» aún no estaba en la matriz, se agregó.

## Ejemplos de código
<a name="addToSet-code"></a>

Para ver un ejemplo de código para usar el `$addToSet` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('products');

  await collection.updateOne(
    { "item": "apple" },
    { $addToSet: { "tags": "green" } }
  );

  const updatedDoc = await collection.findOne({ "item": "apple" });
  console.log(updatedDoc);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.products

    collection.update_one(
        {"item": "apple"},
        {"$addToSet": {"tags": "green"}}
    )

    updated_doc = collection.find_one({"item": "apple"})
    print(updated_doc)

    client.close()

example()
```

------

# \$1bit
<a name="bit"></a>

El `$bit` operador de Amazon DocumentDB le permite realizar operaciones bit a bit en los bits de un campo determinado. Esto puede resultar útil para tareas como configurar, borrar o comprobar el estado de los bits individuales de un número.

**Parámetros**
+ `field`: El campo en el que se realizan operaciones bit a bit.
+ `and`: un valor entero que se utiliza para realizar una operación AND bit a bit en el campo.
+ `or`: un valor entero que se utiliza para realizar una operación OR bit a bit en el campo.
+ `xor`: un valor entero que se utiliza para realizar una operación XOR bit a bit en el campo.

## Ejemplo (MongoDB Shell)
<a name="bit-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$bit` operador para realizar operaciones bit a bit en un campo numérico.

**Cree documentos de muestra**

```
db.numbers.insert([
  { "_id": 1, "number": 5 },
  { "_id": 2, "number": 12 }
])
```

**Ejemplo de consulta**

```
db.numbers.update(
  { "_id": 1 },
  { "$bit": { "number": { "and": 3 } } }
)
```

**Salida**

```
{
  "_id": 1,
  "number": 1
}
```

En este ejemplo, el `$bit` operador se utiliza para realizar una operación AND bit a bit en el campo «numérico» del documento con un valor `_id` de 1. El resultado es que el valor del campo «numérico» se establece en 1, que es el resultado de la operación AND bit a bit entre el valor original de 5 y el valor 3.

## Ejemplos de código
<a name="bit-code"></a>

Para ver un ejemplo de código para usar el `$bit` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('numbers');

  await collection.updateOne(
    { "_id": 1 },
    { "$bit": { "number": { "and": 3 } } }
  );

  const result = await collection.findOne({ "_id": 1 });
  console.log(result);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
db = client['test']
collection = db['numbers']

collection.update_one(
    {"_id": 1},
    {"$bit": {"number": {"and": 3}}}
)

result = collection.find_one({"_id": 1})
print(result)

client.close()
```

------

# \$1currentDate
<a name="currentDate"></a>

El `$currentDate` operador se utiliza para establecer el valor de un campo en la fecha y hora actuales. Este operador es útil para actualizar automáticamente un campo con la marca de tiempo actual cuando se inserta o actualiza un documento.

**Parámetros**
+ `field`: el campo que se va a actualizar con la fecha y hora actuales.
+ `type`: (opcional) Especifica el tipo de BSON que se utilizará en la fecha actual. Puede ser `date` o `timestamp`.

## Ejemplo (MongoDB Shell)
<a name="currentDate-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$currentDate` operador para establecer el `lastModified` campo en la fecha y hora actuales al insertar un documento nuevo.

**Cree documentos de muestra**

```
db.users.insert({
  name: "John Doe",
  email: "john.doe@example.com"
})
```

**Ejemplo de consulta**

```
db.users.updateOne(
  { name: "John Doe" },
  { $currentDate: { lastModified: true } }
)
```

**Ver documento actualizado**

```
db.users.findOne({ name: "John Doe" })
```

**Salida**

```
{
  _id: ObjectId('...'),
  name: 'John Doe',
  email: 'john.doe@example.com',
  lastModified: ISODate('2025-10-25T22:50:29.963Z')
}
```

## Ejemplos de código
<a name="currentDate-code"></a>

Para ver un ejemplo de código para usar el `$currentDate` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function updateUserWithCurrentDate() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const users = db.collection('users');

  await users.updateOne(
    { name: 'John Doe' },
    { $currentDate: { lastModified: true } }
  );

  console.log('User updated with current date');
  client.close();
}

updateUserWithCurrentDate();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def update_user_with_current_date():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    users = db.users

    result = users.update_one(
        {'name': 'John Doe'},
        {'$currentDate': {'lastModified': True}}
    )

    print('User updated with current date')
    client.close()

update_user_with_current_date()
```

------

# \$1each
<a name="each"></a>

El `$each` operador se utiliza junto con otros operadores de actualización, como `$push` y`$addToSet`, para añadir varios valores a un campo de matriz. Permite añadir varios elementos a una matriz en una sola operación, en lugar de tener que ejecutar varias operaciones de actualización.

**Parámetros**
+ `value`: La matriz de valores que se van a añadir al campo de la matriz.

## Ejemplo (MongoDB Shell)
<a name="each-examples"></a>

En el siguiente ejemplo, se muestra el uso `$each` del operador con el `$push` operador para añadir varios elementos a un campo de matriz.

**Cree documentos de muestra**

```
db.fruits.insertOne({
  _id: 1,
  fruits: ["apple", "banana"]
})
```

**Ejemplo de consulta**

```
db.fruits.updateOne(
  { _id: 1 },
  { $push: { fruits: { $each: ["cherry", "durian", "elderberry"] } } }
)
```

**Ver documento actualizado**

```
db.fruits.findOne({ _id: 1 })
```

**Salida**

```
{
  _id: 1,
  fruits: [ 'apple', 'banana', 'cherry', 'durian', 'elderberry' ]
}
```

## Ejemplos de código
<a name="each-code"></a>

Para ver un ejemplo de código para usar el `$each` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('fruits');

  await collection.updateOne(
    { _id: 1 },
    { $push: { fruits: { $each: ["cherry", "durian", "elderberry"] } } }
  );

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['fruits']

    collection.update_one(
        {'_id': 1},
        {'$push': {'fruits': {'$each': ['cherry', 'durian', 'elderberry']}}}
    )

    client.close()

example()
```

------

# \$1inc
<a name="inc"></a>

El `$inc` operador se usa para incrementar el valor de un campo en una cantidad específica. Se utiliza para actualizar un campo numérico, como un contador o una calificación, sin tener que recuperar el valor actual, calcular el nuevo valor y, a continuación, actualizar el campo.

**Parámetros**
+ `field`: el nombre del campo que se va a incrementar.
+ `amount`: la cantidad en la que se va a incrementar el campo. Puede ser un valor positivo o negativo.

## Ejemplo (MongoDB Shell)
<a name="inc-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$inc` operador para incrementar el `age` campo de un documento.

**Cree documentos de muestra**

```
db.users.insertOne({_id: 123, name: "John Doe", age: 30})
```

**Ejemplo de consulta**

```
db.users.updateOne({_id: 123}, {$inc: {age: 1}})
```

**Ver documento actualizado**

```
db.users.findOne({_id: 123})
```

**Salida**

```
{ "_id" : 123, "name" : "John Doe", "age" : 31 }
```

## Ejemplos de código
<a name="inc-code"></a>

Para ver un ejemplo de código para usar el `$inc` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function updateWithInc() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('users');

  const result = await collection.updateOne(
    { _id: 123 },
    { $inc: { age: 1 } }
  );

  console.log(result);

  await client.close();
}

updateWithInc();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def update_with_inc():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['users']

    result = collection.update_one(
        {'_id': 123},
        {'$inc': {'age': 1}}
    )

    print(result.modified_count)

    client.close()

update_with_inc()
```

------

# \$1max
<a name="max-update"></a>

El operador de `$max` actualización actualiza el valor de un campo solo si el valor especificado es mayor que el valor del campo actual. Este operador es útil para mantener los valores máximos en todas las actualizaciones.

**Parámetros**
+ `field`: el campo que se va a actualizar.
+ `value`: el valor que se va a comparar con el valor del campo actual.

## Ejemplo (MongoDB Shell)
<a name="max-update-examples"></a>

En el siguiente ejemplo, se muestra el uso `$max` del operador para actualizar la puntuación más alta registrada para un jugador.

**Cree documentos de muestra**

```
db.scores.insertMany([
  { _id: 1, player: "Alice", highScore: 85 },
  { _id: 2, player: "Bob", highScore: 92 },
  { _id: 3, player: "Charlie", highScore: 78 }
])
```

**Ejemplo de actualización**

```
db.scores.updateOne(
  { _id: 1 },
  { $max: { highScore: 95 } }
)
```

**Resultado**

El `highScore` campo de Alice se actualiza a 95 porque 95 es mayor que el valor actual de 85.

```
{ "_id": 1, "player": "Alice", "highScore": 95 }
```

## Ejemplos de código
<a name="max-update-code"></a>

Para ver un ejemplo de código para usar el `$max` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('scores');

  const result = await collection.updateOne(
    { _id: 1 },
    { $max: { highScore: 95 } }
  );

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['scores']

    result = collection.update_one(
        { '_id': 1 },
        { '$max': { 'highScore': 95 } }
    )

    print(result)
    client.close()

example()
```

------

# \$1min
<a name="min-update"></a>

El operador de `$min` actualización actualiza el valor de un campo solo si el valor especificado es inferior al valor del campo actual. Este operador es útil para mantener los valores mínimos en todas las actualizaciones.

**Parámetros**
+ `field`: el campo que se va a actualizar.
+ `value`: el valor que se va a comparar con el valor del campo actual.

## Ejemplo (MongoDB Shell)
<a name="min-update-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$min` operador para actualizar la temperatura más baja registrada en una estación meteorológica.

**Cree documentos de muestra**

```
db.weather.insertMany([
  { _id: 1, station: "Station A", lowestTemp: 15 },
  { _id: 2, station: "Station B", lowestTemp: 20 },
  { _id: 3, station: "Station C", lowestTemp: 18 }
])
```

**Ejemplo de actualización**

```
db.weather.updateOne(
  { _id: 1 },
  { $min: { lowestTemp: 12 } }
)
```

**Resultado**

El `lowestTemp` campo de la estación A se actualiza a 12 porque 12 es menor que el valor actual de 15.

```
{ "_id": 1, "station": "Station A", "lowestTemp": 12 }
```

## Ejemplos de código
<a name="min-update-code"></a>

Para ver un ejemplo de código para usar el `$min` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('weather');

  const result = await collection.updateOne(
    { _id: 1 },
    { $min: { lowestTemp: 12 } }
  );

  console.log(result);
  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['weather']

    result = collection.update_one(
        { '_id': 1 },
        { '$min': { 'lowestTemp': 12 } }
    )

    print(result)
    client.close()

example()
```

------

# \$1mul
<a name="mul"></a>

El `$mul` operador de Amazon DocumentDB se utiliza para multiplicar el valor de un campo por un número específico. Esto puede resultar útil para actualizar varios documentos de forma atómica y coherente, por ejemplo, para actualizar las millas de vuelo en función del estado de una tarjeta de crédito.

**Parámetros**
+ `field`: El campo que se va a multiplicar.
+ `multiplier`: el número por el que se va a multiplicar el valor del campo.

## Ejemplo (MongoDB Shell)
<a name="mul-examples"></a>

En este ejemplo se muestra cómo utilizar el `$mul` operador para duplicar el `flight_miles` valor de todos los documentos en los que se encuentra el `credit_card` campo. `true`

**Cree documentos de muestra**

```
db.miles.insertMany([
  { "_id": 1, "member_since": new Date("1987-01-01"), "credit_card": false, "flight_miles": [1205, 2560, 880] },
  { "_id": 2, "member_since": new Date("1982-01-01"), "credit_card": true, "flight_miles": [2410, 5120, 1780, 5560] },
  { "_id": 3, "member_since": new Date("1999-01-01"), "credit_card": true, "flight_miles": [2410, 1760] }
]);
```

**Ejemplo de consulta**

```
db.miles.update(
  { "credit_card": { "$eq": true } },
  { "$mul": { "flight_miles.$[]": NumberInt(2) } },
  { "multi": true }
);
```

**Salida**

```
{ "_id" : 1, "member_since" : ISODate("1987-01-01T00:00:00Z"), "credit_card" : false, "flight_miles" : [ 1205, 2560, 880 ] }
{ "_id" : 2, "member_since" : ISODate("1982-01-01T00:00:00Z"), "credit_card" : true, "flight_miles" : [ 4820, 10240, 3560, 11120 ] }
{ "_id" : 3, "member_since" : ISODate("1999-01-01T00:00:00Z"), "credit_card" : true, "flight_miles" : [ 4820, 3520 ] }
```

Para los clientes que tienen una tarjeta de crédito, sus millas de vuelo se han duplicado.

El operador de matriz `$[]` posicional se utiliza para aplicar la `$mul` operación a cada elemento de la `flight_miles` matriz.

## Ejemplos de código
<a name="mul-code"></a>

Para ver un ejemplo de código para usar el `$mul` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function updateFlightMiles() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('miles');

  await collection.updateMany(
    { credit_card: true },
    { $mul: { 'flight_miles.$[]': 2 } }
  );

  const documents = await collection.find().toArray();
  console.log(documents);

  await client.close();
}

updateFlightMiles();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def update_flight_miles():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.miles

    collection.update_many(
        {'credit_card': True},
        {'$mul': {'flight_miles.$[]': 2}}
    )

    documents = list(collection.find())
    print(documents)

    client.close()

update_flight_miles()
```

------

# \$1pop
<a name="pop"></a>

El `$pop` operador de Amazon DocumentDB se utiliza para eliminar el primer o el último elemento de un campo de matriz. Resulta especialmente útil cuando necesita mantener una matriz de tamaño fijo o implementar una estructura de datos similar a una cola en un documento.

**Parámetros**
+ `field`: el nombre del campo de matriz del que se va a eliminar un elemento.
+ `value`: un valor entero que determina la posición del elemento que se va a eliminar. Un valor de `1` elimina el último elemento, mientras que un valor de `-1` elimina el primer elemento.

## Ejemplo (MongoDB Shell)
<a name="pop-examples"></a>

En este ejemplo se muestra cómo utilizar el `$pop` operador para eliminar el primer y el último elemento de un campo matricial.

**Cree documentos de muestra**

```
db.users.insertMany([
  { "_id": 1, "name": "John Doe", "hobbies": ["reading", "swimming", "hiking"] },
  { "_id": 2, "name": "Jane Smith", "hobbies": ["cooking", "gardening", "painting"] }
])
```

**Ejemplo de consulta**

```
// Remove the first element from the "hobbies" array
db.users.update({ "_id": 1 }, { $pop: { "hobbies": -1 } })

// Remove the last element from the "hobbies" array
db.users.update({ "_id": 2 }, { $pop: { "hobbies": 1 } })
```

**Salida**

```
{ "_id" : 1, "name" : "John Doe", "hobbies" : [ "swimming", "hiking" ] }
{ "_id" : 2, "name" : "Jane Smith", "hobbies" : [ "cooking", "gardening" ] }
```

## Ejemplos de código
<a name="pop-code"></a>

Para ver un ejemplo de código para usar el `$pop` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('users');

  // Remove the first element from the "hobbies" array
  await collection.updateOne({ "_id": 1 }, { $pop: { "hobbies": -1 } });

  // Remove the last element from the "hobbies" array
  await collection.updateOne({ "_id": 2 }, { $pop: { "hobbies": 1 } });

  const users = await collection.find().toArray();
  console.log(users);

  await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['users']

    # Remove the first element from the "hobbies" array
    collection.update_one({"_id": 1}, {"$pop": {"hobbies": -1}})

    # Remove the last element from the "hobbies" array
    collection.update_one({"_id": 2}, {"$pop": {"hobbies": 1}})

    users = list(collection.find())
    print(users)

    client.close()

example()
```

------

# \$1position
<a name="position"></a>

El `$position` modificador de Amazon DocumentDB especifica la ubicación de la matriz en la que el operador inserta `$push` los elementos. Sin el `$position` modificador, el `$push` operador inserta elementos al final de la matriz.

**Parámetros**
+ `field`: El campo de matriz que se va a actualizar.
+ `num`: la posición de la matriz en la que se deben insertar los elementos, según la indexación basada en cero.

**Nota**: Para usar el `$position` modificador, debe aparecer junto con el modificador. `$each`

## Ejemplo (MongoDB Shell)
<a name="position-examples"></a>

El siguiente ejemplo demuestra cómo utilizar el `$position` operador para insertar tareas en posiciones específicas de un sistema de gestión de proyectos.

**Cree documentos de muestra**

```
db.projects.insertOne({ "_id": 1, "name": "Website Redesign", "tasks": ["Design mockups"] })
```

**Ejemplo de consulta 1: añadir tareas urgentes al principio**

```
db.projects.updateOne(
   { _id: 1 },
   {
     $push: {
        tasks: {
           $each: ["Security audit", "Performance review"],
           $position: 0
        }
     }
   }
)
```

**Resultado 1**

```
{ "_id": 1, "name": "Website Redesign", "tasks": ["Security audit", "Performance review", "Design mockups"] }
```

**Ejemplo de consulta 2: añadir tareas en una posición específica**

```
db.projects.insertOne({ "_id": 2, "name": "Mobile App", "tasks": ["Setup project", "Create wireframes", "Deploy to store"] })

db.projects.updateOne(
   { _id: 2 },
   {
     $push: {
        tasks: {
           $each: ["Code review", "Testing phase"],
           $position: 2
        }
     }
   }
)
```

**Resultado 2**

```
{ "_id": 2, "name": "Mobile App", "tasks": ["Setup project", "Create wireframes", "Code review", "Testing phase", "Deploy to store"] }
```

## Ejemplos de código
<a name="position-code"></a>

Para ver un ejemplo de código para usar el `$position` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function insertTasksAtPosition() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('projects');

  await collection.updateOne(
    { _id: 1 },
    {
      $push: {
        tasks: {
          $each: ["Security audit", "Performance review"],
          $position: 0
        }
      }
    }
  );

  const updatedProject = await collection.findOne({ _id: 1 });
  console.log(updatedProject);

  await client.close();
}

insertTasksAtPosition();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def insert_tasks_at_position():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['projects']

    result = collection.update_one(
        {'_id': 1},
        {
            '$push': {
                'tasks': {
                    '$each': ['Security audit', 'Performance review'],
                    '$position': 0
                }
            }
        }
    )

    updated_project = collection.find_one({'_id': 1})
    print(updated_project)

    client.close()

insert_tasks_at_position()
```

------

# \$1pull
<a name="pull"></a>

El `$pull` operador se utiliza para eliminar de una matriz todas las instancias de un valor o valores que coincidan con una condición especificada. Este operador resulta útil cuando se necesitan eliminar elementos específicos de un campo matricial de un documento.

**Parámetros**
+ `field`: el nombre del campo de matriz del que se van a eliminar los valores.
+ `value`: el valor o la condición que determina los elementos que se van a eliminar de la matriz.

## Ejemplo (MongoDB Shell)
<a name="pull-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$pull` operador para eliminar elementos de un campo matricial.

**Cree documentos de muestra**

```
db.restaurants.insertMany([
  {
    name: "Pizza Hut",
    cuisine: "Italian",
    features: ["Delivery", "Takeout", "Dine-in"]
  },
  {
    name: "Sushi Saito",
    cuisine: "Japanese",
    features: ["Dine-in", "Private Dining"]
  },
  {
    name: "Taco Bell",
    cuisine: "Mexican",
    features: ["Delivery", "Takeout", "Drive-thru"]
  }
])
```

**Ejemplo de consulta**

```
db.restaurants.updateMany(
  { cuisine: "Italian" },
  { $pull: { features: "Takeout" } }
)
```

**Salida**

```
{
  "acknowledged" : true,
  "matchedCount" : 1,
  "modifiedCount" : 1
}
```

La consulta anterior elimina la función «Comida para llevar» de todos los documentos en los que el `cuisine` campo es «italiano».

## Ejemplos de código
<a name="pull-code"></a>

Para ver un ejemplo de código para usar el `$pull` comando, selecciona la pestaña correspondiente al idioma que deseas usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function updateRestaurants() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const restaurants = db.collection('restaurants');

  await restaurants.updateMany(
    { cuisine: 'Italian' },
    { $pull: { features: 'Takeout' } }
  );

  const updatedRestaurants = await restaurants.find({}).toArray();
  console.log(updatedRestaurants);

  await client.close();
}

updateRestaurants();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def update_restaurants():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    restaurants = db.restaurants

    result = restaurants.update_many(
        { 'cuisine': 'Italian' },
        { '$pull': { 'features': 'Takeout' } }
    )

    updated_restaurants = list(restaurants.find({}))
    print(updated_restaurants)

    client.close()

update_restaurants()
```

------

# \$1pullAll
<a name="pullAll"></a>

El `$pullAll` operador de Amazon DocumentDB se utiliza para eliminar todas las instancias de los valores especificados de un campo de matriz. Esto resulta especialmente útil cuando necesita eliminar varios elementos de una matriz en una sola operación.

**Parámetros**
+ `field`: el nombre del campo de matriz del que se van a eliminar los elementos.
+ `value`: una matriz de valores para eliminar del campo de matriz.

## Ejemplo (MongoDB Shell)
<a name="pullAll-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$pullAll` operador para eliminar varios elementos de un campo matricial.

**Cree documentos de muestra**

```
db.restaurants.insert([
  {
    "name": "Taj Mahal",
    "cuisine": "Indian",
    "features": ["Private Dining", "Live Music"]
  },
  {
    "name": "Golden Palace",
    "cuisine": "Chinese",
    "features": ["Private Dining", "Takeout"]
  },
  {
    "name": "Olive Garden",
    "cuisine": "Italian",
    "features": ["Private Dining", "Outdoor Seating"]
  }
])
```

**Ejemplo de consulta**

```
db.restaurants.update(
  { "name": "Taj Mahal" },
  { $pullAll: { "features": ["Private Dining", "Live Music"] } }
)
```

**Salida**

```
{
  "name": "Taj Mahal",
  "cuisine": "Indian",
  "features": []
}
```

## Ejemplos de código
<a name="pullAll-code"></a>

Para ver un ejemplo de código para usar el `$pullAll` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function main() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('restaurants');

  await collection.updateMany(
    { "name": "Taj Mahal" },
    { $pullAll: { "features": ["Private Dining", "Live Music"] } }
  );

  const updatedDocument = await collection.findOne({ "name": "Taj Mahal" });
  console.log(updatedDocument);

  await client.close();
}

main();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def main():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['restaurants']

    collection.update_many(
        {"name": "Taj Mahal"},
        {"$pullAll": {"features": ["Private Dining", "Live Music"]}}
    )

    updated_document = collection.find_one({"name": "Taj Mahal"})
    print(updated_document)

    client.close()

if __name__ == '__main__':
    main()
```

------

# \$1push
<a name="push"></a>

El `$push` operador de Amazon DocumentDB se utiliza para añadir un elemento a un campo de matriz de un documento. Este operador resulta especialmente útil cuando necesita añadir nuevos datos a una matriz existente sin sobrescribir toda la matriz.

**Parámetros**
+ `field`: el nombre del campo de matriz al que se debe añadir el nuevo elemento.
+ `value`: El valor que se va a añadir a la matriz.
+ `position`: (opcional) Un modificador que especifica la posición de la matriz en la que se debe añadir el nuevo elemento. Los modificadores admitidos incluyen `$` (añadir al final de la matriz) y `$[]` (añadir al final de la matriz, ignorando cualquier filtro de matriz).

## Ejemplo (MongoDB Shell)
<a name="push-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$push` operador para añadir nuevos elementos a un campo matricial de un documento.

**Cree documentos de muestra**

```
db.users.insert([
  { _id: 1, name: "John Doe", hobbies: ["reading", "swimming"] },
  { _id: 2, name: "Jane Smith", hobbies: ["gardening", "cooking"] }
])
```

**Ejemplo de consulta**

```
db.users.updateOne(
  { _id: 1 },
  { $push: { hobbies: "hiking" } }
)
```

**Salida**

```
{
  "acknowledged" : true,
  "matchedCount" : 1,
  "modifiedCount" : 1
}
```

Tras ejecutar la actualización, el documento con la `hobbies` matriz se `_id: 1` actualizará a`[&quot;reading&quot;, &quot;swimming&quot;, &quot;hiking&quot;]`.

## Ejemplos de código
<a name="push-code"></a>

Para ver un ejemplo de código para usar el `$push` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function updateDocument() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('users');

  const result = await collection.updateOne(
    { _id: 1 },
    { $push: { hobbies: "hiking" } }
  );

  console.log(result);
  client.close();
}

updateDocument();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def update_document():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['users']

    result = collection.update_one(
        {'_id': 1},
        {'$push': {'hobbies': 'hiking'}}
    )

    print(result.raw_result)
    client.close()

update_document()
```

------

# \$1rename
<a name="rename"></a>

El `$rename` operador de Amazon DocumentDB se utiliza para cambiar el nombre de un campo de un documento. Este operador puede resultar especialmente útil cuando necesita actualizar la estructura de sus documentos o alinearlos con nuevos modelos de datos.

**Parámetros**
+ `field`: el campo al que se va a cambiar el nombre.
+ `newName`: el nuevo nombre del campo.

## Ejemplo (MongoDB Shell)
<a name="rename-examples"></a>

En el siguiente ejemplo se muestra cómo utilizar el `$rename` operador para cambiar el nombre del `&quot;Date.DoW&quot;` campo a `&quot;Date.DayOfWeek&quot;` en un documento con el `&quot;DocName&quot;` campo establecido en. `&quot;Document 1&quot;`

**Cree documentos de muestra**

```
db.example.insertOne({
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    },
    "Words": 2482
})
```

**Ejemplo de consulta**

```
db.example.update(
    { "DocName": "Document 1" },
    { $rename: { "Date.DoW": "Date.DayOfWeek" } }
)
```

**Salida**

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DayOfWeek": "Saturday"
    },
    "Words": 2482
}
```

## Ejemplos de código
<a name="rename-code"></a>

Para ver un ejemplo de código para usar el `$rename` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
    const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
    const db = client.db('test');
    const collection = db.collection('example');

    await collection.updateOne(
        { "DocName": "Document 1" },
        { $rename: { "Date.DoW": "Date.DayOfWeek" } }
    );

    const updatedDoc = await collection.findOne({ "DocName": "Document 1" });
    console.log(updatedDoc);

    await client.close();
}

example();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def example():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['example']

    collection.update_one(
        {"DocName": "Document 1"},
        {"$rename": {"Date.DoW": "Date.DayOfWeek"}}
    )

    updated_doc = collection.find_one({"DocName": "Document 1"})
    print(updated_doc)

    client.close()

example()
```

------

# \$1set
<a name="set-update"></a>

El `$set` operador de Amazon DocumentDB se utiliza para actualizar el valor de un campo específico de un documento. Este operador le permite añadir nuevos campos o modificar los existentes en un documento. Es un operador de actualización fundamental en el controlador Java de MongoDB, que es compatible con Amazon DocumentDB.

**Parámetros**
+ `field`: El campo que se va a actualizar.
+ `value`: el nuevo valor del campo.

## Ejemplo (MongoDB Shell)
<a name="set-examples"></a>

En el siguiente ejemplo, se muestra cómo utilizar el `$set` operador para actualizar el `Item` campo de un documento.

**Cree documentos de muestra**

```
db.example.insert([
  {
    "Item": "Pen",
    "Colors": ["Red", "Green", "Blue", "Black"],
    "Inventory": {
      "OnHand": 244,
      "MinOnHand": 72
    }
  },
  {
    "Item": "Poster Paint",
    "Colors": ["Red", "Green", "Blue", "White"],
    "Inventory": {
      "OnHand": 120,
      "MinOnHand": 36
    }
  }
])
```

**Ejemplo de consulta**

```
db.example.update(
  { "Item": "Pen" },
  { $set: { "Item": "Gel Pen" } }
)
```

**Salida**

```
{
  "Item": "Gel Pen",
  "Colors": ["Red", "Green", "Blue", "Black"],
  "Inventory": {
    "OnHand": 244,
    "MinOnHand": 72
  }
}
```

## Ejemplos de código
<a name="set-code"></a>

Para ver un ejemplo de código para usar el `$set` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function updateDocument() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('example');

  await collection.updateOne(
    { "Item": "Pen" },
    { $set: { "Item": "Gel Pen" } }
  );

  const updatedDocument = await collection.findOne({ "Item": "Gel Pen" });
  console.log(updatedDocument);

  await client.close();
}

updateDocument();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def update_document():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.example

    collection.update_one(
        {"Item": "Pen"},
        {"$set": {"Item": "Gel Pen"}}
    )

    updated_document = collection.find_one({"Item": "Gel Pen"})
    print(updated_document)

    client.close()

update_document()
```

------

# \$1setOnInsert
<a name="setOnInsert"></a>

El `$setOnInsert` operador de Amazon DocumentDB se utiliza para establecer el valor de un campo si se está insertando un documento, pero no tiene ningún efecto si el documento se está actualizando.

**Parámetros**
+ `field`: El campo que se va a configurar.
+ `value`: el valor que se va a asignar al campo.

## Ejemplo (MongoDB Shell)
<a name="setOnInsert-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$setOnInsert` operador en Amazon DocumentDB. Crea un documento nuevo si el documento aún no existe, pero no tiene ningún efecto si el documento se está actualizando.

**Crea documentos de muestra**

```
db.users.insertOne({
  _id: 1,
  name: "John Doe",
  age: 30
})
```

**Ejemplo de consulta 1: Actualizar un documento existente**

```
db.users.update(
  { _id: 1 },
  {
    $set: { age: 31 },
    $setOnInsert: { createdAt: new Date() }
  },
  { upsert: true }
)
```

**Resultado 1**

```
{
  _id: 1,
  name: "John Doe",
  age: 31
}
```

El resultado muestra que el documento se actualizó, pero el `createdAt` campo **NO se agregó** porque el documento ya existía. El `$setOnInsert` operador solo se aplica al insertar documentos nuevos.

**Ejemplo de consulta 2: Insertar un documento nuevo (parte superior)**

```
db.users.update(
  { _id: 2 },
  {
    $set: { name: "Jane Smith", age: 25 },
    $setOnInsert: { createdAt: new Date() }
  },
  { upsert: true }
)
```

**Salida 2**

```
{
  _id: 2,
  name: "Jane Smith", 
  age: 25,
  createdAt: ISODate("2025-10-31T09:57:52.459Z")
}
}
```

## Ejemplos de código
<a name="setOnInsert-code"></a>

Para ver un ejemplo de código para usar el `$setOnInsert` comando, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function updateWithSetOnInsert() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const users = db.collection('users');

  await users.updateOne(
    { _id: 1 },
    {
      $set: { age: 31 },
      $setOnInsert: { createdAt: new Date() }
    },
    { upsert: true }
  );

  const updatedUser = await users.findOne({ _id: 1 });
  console.log(updatedUser);

  await client.close();
}

updateWithSetOnInsert();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def update_with_set_on_insert():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    users = db['users']

    result = users.update_one(
        {'_id': 1},
        {
            '$set': {'age': 31},
            '$setOnInsert': {'createdAt': datetime.datetime.now()}
        },
        upsert=True
    )

    updated_user = users.find_one({'_id': 1})
    print(updated_user)

    client.close()

update_with_set_on_insert()
```

------

# \$1slice
<a name="slice-update"></a>

El operador de `$slice` actualización modifica una matriz limitando su tamaño. Cuando se usa con el `$push` operador, restringe el número de elementos de una matriz y mantiene solo el número especificado de elementos más recientes o más antiguos.

**Parámetros**
+ `field`: el campo de matriz que se va a modificar.
+ `count`: Número máximo de elementos que se deben conservar. Los valores positivos mantienen los primeros N elementos, los valores negativos mantienen los N últimos elementos.

## Ejemplo (MongoDB Shell)
<a name="slice-update-examples"></a>

El siguiente ejemplo demuestra cómo utilizar el operador de `$slice` actualización con `$push` para mantener una matriz de partituras recientes de tamaño fijo.

**Cree documentos de muestra**

```
db.students.insertOne({
  _id: 1,
  name: "Alice",
  scores: [85, 90, 78]
});
```

**Ejemplo de consulta**

```
db.students.updateOne(
  { _id: 1 },
  {
    $push: {
      scores: {
        $each: [92, 88],
        $slice: -3
      }
    }
  }
)
```

**Salida**

```
{
  "_id" : 1,
  "name" : "Alice",
  "scores" : [ 78, 92, 88 ]
}
```

En este ejemplo, el `$slice: -3` modificador conserva solo los tres últimos elementos después de introducir nuevos valores en la matriz.

## Ejemplos de código
<a name="slice-update-code"></a>

Para ver un ejemplo de código para usar el operador de `$slice` actualización, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function updateDocument() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('students');

  await collection.updateOne(
    { _id: 1 },
    {
      $push: {
        scores: {
          $each: [92, 88],
          $slice: -3
        }
      }
    }
  );

  const updatedDocument = await collection.findOne({ _id: 1 });
  console.log(updatedDocument);

  await client.close();
}

updateDocument();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def update_document():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.students

    collection.update_one(
        {'_id': 1},
        {
            '$push': {
                'scores': {
                    '$each': [92, 88],
                    '$slice': -3
                }
            }
        }
    )

    updated_document = collection.find_one({'_id': 1})
    print(updated_document)

    client.close()

update_document()
```

------

# \$1sort
<a name="sort-update"></a>

El modificador de `$sort` actualización ordena los elementos de la matriz cuando se usa con el `$push` operador. Organiza los elementos de la matriz en orden ascendente o descendente en función de los valores de campo especificados o de los propios elementos.

**Parámetros**
+ `field`: El campo de matriz que se va a modificar.
+ `order`: Se utiliza `1` en orden ascendente o `-1` descendente.

## Ejemplo (MongoDB Shell)
<a name="sort-update-examples"></a>

En el siguiente ejemplo, se muestra el uso del `$sort` modificador con `$push` para añadir nuevas puntuaciones a las pruebas y mantenerlas ordenadas en orden descendente.

**Cree documentos de muestra**

```
db.students.insertOne({
  _id: 1,
  name: "Bob",
  quizzes: [
    { score: 85, date: "2024-01-15" },
    { score: 92, date: "2024-02-10" }
  ]
});
```

**Ejemplo de consulta**

```
db.students.updateOne(
  { _id: 1 },
  {
    $push: {
      quizzes: {
        $each: [{ score: 78, date: "2024-03-05" }],
        $sort: { score: -1 }
      }
    }
  }
)
```

**Salida**

```
{
  "_id" : 1,
  "name" : "Bob",
  "quizzes" : [
    { "score" : 92, "date" : "2024-02-10" },
    { "score" : 85, "date" : "2024-01-15" },
    { "score" : 78, "date" : "2024-03-05" }
  ]
}
```

## Ejemplos de código
<a name="sort-update-code"></a>

Para ver un ejemplo de código para usar el modificador de `$sort` actualización, elija la pestaña del idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function updateDocument() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('students');

  await collection.updateOne(
    { _id: 1 },
    {
      $push: {
        quizzes: {
          $each: [{ score: 78, date: "2024-03-05" }],
          $sort: { score: -1 }
        }
      }
    }
  );

  const updatedDocument = await collection.findOne({ _id: 1 });
  console.log(updatedDocument);

  await client.close();
}

updateDocument();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def update_document():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client.test
    collection = db.students

    collection.update_one(
        {'_id': 1},
        {
            '$push': {
                'quizzes': {
                    '$each': [{'score': 78, 'date': '2024-03-05'}],
                    '$sort': {'score': -1}
                }
            }
        }
    )

    updated_document = collection.find_one({'_id': 1})
    print(updated_document)

    client.close()

update_document()
```

------

# \$1unset
<a name="unset-update"></a>

El `$unset` operador de Amazon DocumentDB se utiliza para eliminar un campo específico de un documento. Cuando se elimina un campo utilizando`$unset`, el campo se elimina del documento y el tamaño del documento se reduce en consecuencia. Esto puede resultar útil cuando desee eliminar datos innecesarios de sus documentos.

**Parámetros**
+ `field`: el campo que se va a eliminar del documento. Puede ser un campo único o una ruta punteada que lleve a un campo anidado.

## Ejemplo (MongoDB Shell)
<a name="unset-examples"></a>

El siguiente ejemplo muestra cómo utilizar el `$unset` operador para eliminar el `Words` campo de un documento de la `example` colección.

**Cree documentos de muestra**

```
db.example.insert({
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    },
    "Words": 2482
})
```

**Ejemplo de consulta**

```
db.example.update(
    { "DocName" : "Document 1" },
    { $unset: { Words:1 } }
)
```

**Salida**

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    }
}
```

En este ejemplo, el `$unset` operador se utiliza para eliminar el `Words` campo del documento con `DocName` el valor «Documento 1". El documento resultante ya no contiene el `Words` campo.

## Ejemplos de código
<a name="unset-code"></a>

Para ver un ejemplo de código para usar el `$unset` comando, elija la pestaña correspondiente al idioma que desee usar:

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function removeField() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false');
  const db = client.db('test');
  const collection = db.collection('example');

  const result = await collection.updateOne(
    { "DocName": "Document 1" },
    { $unset: { "Words": 1 } }
  );

  console.log(`Modified ${result.modifiedCount} document(s)`);
  client.close();
}

removeField();
```

------
#### [ Python ]

```
from pymongo import MongoClient

def remove_field():
    client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')
    db = client['test']
    collection = db['example']

    result = collection.update_one(
        {"DocName": "Document 1"},
        {"$unset": {"Words": 1}}
    )

    print(f"Modified {result.modified_count} document(s)")
    client.close()

remove_field()
```

------