

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# APIsMongoDB, operações e tipos de dados compatíveis no Amazon DocumentDB
<a name="mongo-apis"></a>

O Amazon DocumentDB (compativel com MongoDB) é um serviço de banco de dados de documentos rápido, escalável, totalmente gerenciado e altamente disponível que oferece suporte a workloads. O Amazon DocumentDB é compatível com o MongoDB 3.6, 4.0, 5.0 e 8.0. APIs Esta seção lista as funcionalidades com suporte. Para obter suporte ao uso do APIs MongoDB e dos drivers, consulte os fóruns da comunidade do MongoDB. Para obter suporte usando o serviço Amazon DocumentDB, entre em contato com a equipe de AWS suporte apropriada. Para diferenças funcionais entre Amazon DocumentDB e MongoDB, consulte [Diferenças funcionais: Amazon DocumentDB e MongoDB](functional-differences.md). 

Os comandos e operadores do MongoDB somente para uso interno ou não aplicáveis a um serviço totalmente gerenciado não têm suporte e não são incluídos na lista de funcionalidades com suporte.

Adicionamos mais de 50 recursos desde o lançamento e continuaremos trabalhando para oferecer os recursos de que nossos clientes precisam. Para obter informações sobre os lançamentos mais recentes, consulte [Anúncios do Amazon DocumentDB](https://aws.amazon.com/documentdb/resources/).

Se você quiser que um recurso passe a ter suporte, envie um e-mail informando seu ID de conta, os atributos solicitados e o caso de uso para a [equipe de serviço do Amazon DocumentDB](mailto:documentdb-feature-request@amazon.com).
+ [Comandos do banco de dados](#mongo-apis-database)
+ [Operadores de consulta e projeção](#mongo-apis-query)
+ [Operadores de atualização](#mongo-apis-update)
+ [Geoespacial](#mongo-apis-geospatial)
+ [Métodos de cursor](#mongo-apis-cursor)
+ [Operadores de pipeline de agregação](#mongo-apis-aggregation-pipeline)
+ [Tipos de dados](#mongo-apis-data-types)
+ [Índices](#mongo-apis-indexes)

## Comandos do banco de dados
<a name="mongo-apis-database"></a>

**Topics**
+ [Comandos administrativos](#mongo-apis-dababase-administrative)
+ [Agregação](#mongo-apis-dababase-aggregation)
+ [Autenticação](#mongo-apis-dababase-authentication)
+ [Comandos de diagnóstico](#mongo-apis-dababase-diagnostics)
+ [Operações de gravação e de consulta](#mongo-apis-dababase-query-write)
+ [Comandos de gerenciamento de perfis](#mongo-apis-database-role-management)
+ [Comandos de sessão](#mongo-apis-dababase-sessions)
+ [Gerenciamento de usuários](#mongo-apis-dababase-user-management)
+ [Comandos de fragmentação](#mongo-apis-dababase-sharding)

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  Coleções limitadas  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  cloneCollectionAsTampado  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  collMod  |  Parcial  |  Parcial  |  Parcial  |  Parcial  |  Parcial  | 
|  CollMod: expireAfterSeconds  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  convertToCapped  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  copydb  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  criar  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  createView  |  Não  |  Não  |  Não  |  Sim  |  Não  | 
|  createIndexes  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  currentOp  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  drop  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  dropDatabase  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  dropIndexes  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  filemd5  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  getAuditConfig  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 
|  killCursors  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  killOp  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  listCollections\$1  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  listDatabases  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  listIndexes  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  reIndex  |  Não  |  Não  |  Sim  |  Sim  |  Não  | 
|  renameCollection  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  setAuditConfig  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 

\$1 A chave `type` na opção de filtro não é compatível.

### Agregação
<a name="mongo-apis-dababase-aggregation"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  aggregate  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  contagem  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  distinct  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  mapReduce  |  Não  |  Não  |  Não  |  Sim  |  Não  | 

### Autenticação
<a name="mongo-apis-dababase-authentication"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  authenticate  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  logout  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  buildInfo  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  collStats  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  connPoolStats  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  connectionStatus  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  dataSize  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  dbHash  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  dbStats  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  explain  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  explain: executionStats  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  recursos  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  hostInfo  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  listCommands  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  profiler  |  [Sim](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  [Sim](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  [Sim](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  [Sim](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  Não  | 
|  serverStatus  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  top  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Operações de gravação e de consulta
<a name="mongo-apis-dababase-query-write"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  Change streams  |  [Sim](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  [Sim](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  [Sim](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  [Sim](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  Não  | 
|  excluir  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  find  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  findAndModify  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  getLastError  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  getMore  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  getPrevError  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  GridFS  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  insert  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  parallelCollectionScan  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  resetError  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  atualizar  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  ReplaceOne  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Comandos de gerenciamento de perfis
<a name="mongo-apis-database-role-management"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  createRole  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  dropAllRolesFromDatabase  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  dropRole  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  grantRolesToFunção  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  revokeRolesFromFunção  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  revokePrivilegesFromFunção  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  rolesInfo  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  updateRole  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 

### Comandos de sessão
<a name="mongo-apis-dababase-sessions"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  abortTransaction  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 
|  commitTransaction  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 
|  endSessions  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|   killAllSessions  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 
|  killAllSessionsByPattern  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  killSessions  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 
|  refreshSessions  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  startSession  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 

### Gerenciamento de usuários
<a name="mongo-apis-dababase-user-management"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  createUser  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  dropAllUsersFromDatabase  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  dropUser  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  grantRolesToUsuário  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  revokeRolesFromUsuário  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  updateUser  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  usersInfo  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Comandos de fragmentação
<a name="mongo-apis-dababase-sharding"></a>


| Command | Cluster elástico | 
| --- | --- | 
|  abortReshardCollection  |  Não  | 
|  addShard  |  Não  | 
|  addShardToZona  |  Não  | 
|  balancerCollectionStatus  |  Não  | 
|  balancerStart  |  Não  | 
|  balancerStatus  |  Não  | 
|  balancerStop  |  Não  | 
|  checkShardingIndex  |  Não  | 
|  clearJumboFlag  |  Não  | 
|  cleanupOrphaned  |  Não  | 
|  cleanupReshardCollection  |  Não  | 
|  commitReshardCollection  |  Não  | 
|  enableSharding  |  Sim  | 
|  flushRouterConfig  |  Não  | 
|  getShardMap  |  Não  | 
|  getShardVersion  |  Não  | 
|  isdbgrid  |  Não  | 
|  listShards  |  Não  | 
|  medianKey  |  Não  | 
|  moveChunk  |  Não  | 
|  movePrimary  |  Não  | 
|  mergeChunks  |  Não  | 
|  refineCollectionShardChave  |  Não  | 
|  removeShard  |  Não  | 
|  removeShardFromZona  |  Não  | 
|  reshardCollection  |  Não  | 
|  setAllowMigrations  |  Não  | 
|  setShardVersion  |  Não  | 
|  shardCollection  |  Sim  | 
|  shardingState  |  Não  | 
|  dividir  |  Não  | 
|  splitVector  |  Não  | 
|  unsetSharding  |  Não  | 
|  updateZoneKeyAlcance  |  Não  | 

## Operadores de consulta e projeção
<a name="mongo-apis-query"></a>

**Topics**
+ [Operadores de matriz](#mongo-apis-query-array-operators)
+ [Operadores bitwise](#mongo-apis-query-bitwise-operators)
+ [Operador de comentários](#mongo-apis-query-comment-operator)
+ [Operadores de comparação](#mongo-apis-query-comparison-operators)
+ [Operadores de elemento](#mongo-apis-query-element-operators)
+ [Operadores de consulta de avaliação](#mongo-apis-query-evaluation-operators)
+ [Operadores lógicos](#mongo-apis-query-logical-operators)
+ [Operadores de projeção](#mongo-apis-projection-operators)

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1all](all.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1elemMatch](elemMatch.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1size](size-query.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1bitsAllSet](bitsAllSet.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1bitsAnySet](bitsAnySet.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1bitsAllClear](bitsAllClear.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1bitsAnyClear](bitsAnyClear.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1comment](comment.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Operadores de comparação
<a name="mongo-apis-query-comparison-operators"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1eq](eq.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1gt](gt.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1gte](gte.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1in](in.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1lt](lt.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1lte](lte.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1ne](ne.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1nin](nin.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1exists](exists.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1type](type.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Operadores de consulta de avaliação
<a name="mongo-apis-query-evaluation-operators"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1expr](expr.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 
|  [\$1jsonSchema](jsonSchema.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 
|  [\$1mod](mod-query.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1regex](regex.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1text](text.md)  |  Não  |  Não  |  Sim  |  Sim  |  Não  | 
|  \$1where  |  Não  |  Não  |  Não  |  Não  |  Não  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1and](and.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1nor](nor.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1not](not.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1or](or.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Operadores de projeção
<a name="mongo-apis-projection-operators"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1](dollar-projection.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1elemMatch](elemMatch.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1meta](meta.md)  |  Não  |  Não  |  Sim  |  Sim  |  Não  | 
|  [\$1slice](slice-projection.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

## Operadores de atualização
<a name="mongo-apis-update"></a>

**Topics**
+ [Operadores de matriz](#mongo-apis-update-array)
+ [Operadores bitwise](#mongo-apis-update-bitwise)
+ [Operadores de campo](#mongo-apis-update-field)
+ [Modificadores de atualização](#mongo-apis-update-modifiers)

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1](dollar-update.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1[]](dollarBrackets-update.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1[<identifier>]](dollarIdentifier-update.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1addToSet](addToSet.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1pop](pop.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1pullAll](pullAll.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1pull](pull.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1push](push.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1bit](bit.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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


| Operador | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1currentDate](currentDate.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1inc](inc.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1max](max-update.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1min](min-update.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1mul](mul.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1rename](rename.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1set](set-update.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1setOnInsert](setOnInsert.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1unset](unset-update.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Modificadores de atualização
<a name="mongo-apis-update-modifiers"></a>


| Operador | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1each](each.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1position](position.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1slice](slice-update.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1sort](sort-update.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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

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


| Seletores de consulta | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1box  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1center  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1centerSphere  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  [\$1geometry](geometry.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1maxDistance](maxDistance.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1minDistance](minDistance.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1nearSphere](nearSphere.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  \$1polygon  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1uniqueDocs  |  Não  |  Não  |  Não  |  Não  |  Não  | 

### Seletores de consulta
<a name="mongo-apis-geospatial-query-selectors"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1geoIntersects](geoIntersects.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1geoWithin](geoWithin.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1near](near.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1nearSphere](nearSphere.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  \$1polygon  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1uniqueDocs  |  Não  |  Não  |  Não  |  Não  |  Não  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  cursor.batchSize()  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  cursor.close()  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  cursor.collation()  |  Não  |  Não  |  Não  |  Sim  |  Não  | 
|  cursor.comment()  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  cursor.count()  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  cursor.explain()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.forEach()  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  cursor.hasNext()  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  cursor.hint()  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim\$1  | 
|  cursor.isClosed()  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  cursor.isExhausted()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.itcount()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.limit()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.map()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.max()  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  cursor.maxScan()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.maxTimeMS()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.min()  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  cursor.next()  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  cursor. noCursorTimeout()  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  cursor. objsLeftInBatch ()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.pretty()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.readConcern()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.readPref()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.returnKey()  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  cursor. showRecordId()  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  cursor.size()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.skip()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.sort()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  cursor.tailable()  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  cursor.toArray()  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 

\$1 O `hint` de índice é compatível com expressões de índice. Por exemplo, .`db.foo.find().hint({x:1})`

## Operadores de pipeline de agregação
<a name="mongo-apis-aggregation-pipeline"></a>

**Topics**
+ [Expressões do acumulador](#mongo-apis-aggregation-pipeline-accumulator-expressions)
+ [Operadores aritméticos](#mongo-apis-aggregation-pipeline-arithmetic)
+ [Operadores de matriz](#mongo-apis-aggregation-pipeline-array)
+ [Operadores booleanos](#mongo-apis-aggregation-pipeline-boolean)
+ [Operadores de comparação](#mongo-apis-aggregation-pipeline-comparison)
+ [Operadores de expressão condicional](#mongo-apis-aggregation-pipeline-conditional)
+ [Operador de tipo de dados](#mongo-apis-aggregation-pipeline-data-type)
+ [Operador de tamanho de dados](#mongo-apis-aggregation-pipeline-data-size)
+ [Operadores de data](#mongo-apis-aggregation-pipeline-date)
+ [Operador literal](#mongo-apis-aggregation-pipeline-literal)
+ [Operador de mesclagem](#mongo-apis-aggregation-pipeline-merge)
+ [Operador natural](#mongo-apis-aggregation-pipeline-natural)
+ [Configurar operadores](#mongo-apis-aggregation-pipeline-set)
+ [Operadores de estágio](#mongo-apis-aggregation-pipeline-stage)
+ [Operadores de string](#mongo-apis-aggregation-pipeline-string)
+ [Variáveis do sistema](#mongo-apis-aggregation-pipeline-system-variables)
+ [Operador de pesquisa de texto](#mongo-apis-aggregation-pipeline-text-search)
+ [Operadores de conversão de tipo](#mongo-apis-aggregation-pipeline-type)
+ [Operadores variáveis](#mongo-apis-aggregation-pipeline-variable)
+ [Operadores diversos](#mongo-apis-aggregation-pipeline-misc)

### Expressões do acumulador
<a name="mongo-apis-aggregation-pipeline-accumulator-expressions"></a>


| Expressão | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1accumulator  |  -  |  -  |  Não  |  Não  |  Não  | 
|  [\$1addToSet](addToSet-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1avg](avg.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1count](count.md)  |  -  |  -  |  Não  |  Não  |  Não  | 
|  \$1covariancePop  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1covarianceSamp  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1denseRank  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1derivative  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1documentNumber  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1expMovingAvg  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  [\$1first](first.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  \$1integral  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  [\$1last](last.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1max](max.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1min](min.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1push](push-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  \$1rank  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1shift  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1stdDevPop  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1stdDevSamp  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  [\$1sum](sum.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1abs](abs.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1add](add.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1ceil](ceil.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1divide](divide.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1exp](exp.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1floor](floor.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1ln](ln.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1log](log.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1log10](log10.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1mod](mod.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1multiply](multiply.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1pow](pow.md)  |  Não  |  Não  |  Não  |  Sim  |  Não  | 
|  \$1round  |  -  |  -  |  Não  |  Não  |  Não  | 
|  [\$1sqrt](sqrt.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1subtract](subtract.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  \$1trunc  |  Não  |  Não  |  Não  |  Não  |  Não  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1arrayElemAt](arrayElemAt.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1arrayToObject](arrayToObject.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1concatArrays](concatArrays.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1filter](filter.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1first](first.md)  |  -  |  -  |  Sim  |  Sim  |  Não  | 
|  [\$1in](in-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1indexOfArray](indexOfArray.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1isArray](isArray.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1last](last.md)  |  -  |  -  |  Sim  |  Sim  |  Não  | 
|  [\$1objectToArray](objectToArray.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1range](range.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1reverseArray](reverseArray.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1reduce](reduce.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1size](size.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1slice](slice.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1zip](zip.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1and](and-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1not](not-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1or](or-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Operadores de comparação
<a name="mongo-apis-aggregation-pipeline-comparison"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1cmp](cmp.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1eq](eq-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1gt](gt-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1gte](gte-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1lt](lt-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1lte](lte-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1ne](ne-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Operadores de expressão condicional
<a name="mongo-apis-aggregation-pipeline-conditional"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1cond](cond.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1ifNull](ifNull.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1switch](switch.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1type](type-aggregation.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Operador de tamanho de dados
<a name="mongo-apis-aggregation-pipeline-data-size"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1binarySize  |  -  |  -  |  Não  |  Não  |  Não  | 
|  \$1bsonSize  |  -  |  -  |  Não  |  Não  |  Não  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1dateAdd](dateAdd.md)  |  Não  |  Não  |  Sim  |  Sim  |  Sim  | 
|  [\$1dateDiff](dateDiff.md)  |  -  |  -  |  Sim  |  Sim  |  Não  | 
|  \$1dateFromParts  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  [\$1dateFromString](dateFromString.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1dateSubtract](dateSubtract.md)  |  Não  |  Não  |  Sim  |  Sim  |  Sim  | 
|  \$1dateToParts  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  [\$1dateToString](dateToString.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1dateTrunc](dateTrunc.md)  |  -  |  -  |  Não  |  Sim  |  Não  | 
|  [\$1dayOfMonth](dayOfMonth.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1dayOfWeek](dayOfWeek.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1dayOfYear](dayOfYear.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1hour](hour.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1 isoDayOf Semana](isoDayOfWeek.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1isoWeek](isoWeek.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1isoWeekYear](isoWeekYear.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1millisecond](millisecond.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1minute](minute.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1month](month.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1second](second.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1week](week.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1year](year.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1literal](literal.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1mergeObjects](mergeObjects.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1natural](natural.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Configurar operadores
<a name="mongo-apis-aggregation-pipeline-set"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1allElementsTrue](allElementsTrue.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1anyElementTrue](anyElementTrue.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1setDifference](setDifference.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1setEquals](setEquals.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1setIntersection](setIntersection.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1setIsSubset](setIsSubset.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1setUnion](setUnion.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  \$1setWindowFields  |  Não  |  Não  |  Não  |  Não  |  Não  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1addFields](addFields.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1bucket](bucket.md)  |  Não  |  Não  |  Não  |  Sim  |  Não  | 
|  \$1bucketAuto  |  Não  |  Não  |  Não  |  Não  | 
|  [\$1changeStream](changeStream.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  [\$1collStats](collStats.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 
|  [\$1count](count.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1currentOp](currentOp.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  \$1facet  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  [\$1geoNear](geoNear.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  \$1graphLookup  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  [\$1group](group.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1indexStats](indexStats.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1limit](limit.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  \$1listLocalSessions  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1listSessions  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  [\$1lookup](lookup.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1match](match.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1merge](merge.md)  |  -  |  -  |  Não  |  Sim  |  Não  | 
|  [\$1out](out.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Não  | 
|  \$1planCacheStats  |  -  |  -  |  Não  |  Não  |  Não  | 
|  [\$1project](project.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1redact](redact.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1replaceRoot](replaceRoot.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1sample](sample.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1set](set-stage.md)  |  -  |  -  |  Não  |  Sim  |  Não  | 
|  \$1setWindowFields  |  -  |  -  |  Não  |  Não  |  Não  | 
|  [\$1skip](skip.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1sort](sort.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  \$1sortByCount  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  \$1unionWith  |  -  |  -  |  Não  |  Não  |  Não  | 
|  [\$1unset](unset-stage.md)  |  -  |  -  |  Não  |  Sim  |  Não  | 
|  [\$1unwind](unwind.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1 substituir por](replaceWith.md)  |  Não  |  Não  |  Não  |  Sim  |  Não  | 
|  [\$1VectorSearch](vectorSearch.md)  |  Não  |  Não  |  Não  |  Sim  |  Não  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1concat](concat.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1indexOfBytes](indexOfBytes.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1indexOfCP](indexOfCP.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1ltrim](ltrim.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 
|  [\$1regexFind](regexFind.md)  |  -  |  -  |  Sim  |  Sim  |  Não  | 
|  [\$1regexFindAll](regexFindAll.md)  |  -  |  -  |  Sim  |  Sim  |  Não  | 
|  [\$1regexMatch](regexMatch.md)  |  -  |  -  |  Sim  |  Sim  |  Não  | 
|  [\$1replaceAll](replaceAll.md)  |  -  |  -  |  Sim  |  Sim  |  Não  | 
|  [\$1replaceOne](replaceOne.md)  |  -  |  -  |  Sim  |  Sim  |  Não  | 
|  [\$1rtrim](rtrim.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 
|  [\$1split](split.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1strcasecmp](strcasecmp.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1strLenBytes](strLenBytes.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1strLenCP](strLenCP.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1substr](substr.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1substrBytes](substrBytes.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1substrCP](substrCP.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1toLower](toLower.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1toUpper](toUpper.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1trim](trim.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Não  | 

### Variáveis do sistema
<a name="mongo-apis-aggregation-pipeline-system-variables"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1\$1CURRENT  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  [\$1\$1DESCEND](DESCEND.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1\$1KEEP](KEEP.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1\$1PRUNE](PRUNE.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  \$1\$1REMOVE  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  [\$1 ROOT](ROOT.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1meta](meta-aggregation.md)  |  Não  |  Não  |  Sim  |  Sim  |  Não  | 
|  [\$1search](search.md)  |  Não  |  Não  |  Sim  |  Sim  |  Não  | 

### Operadores de conversão de tipo
<a name="mongo-apis-aggregation-pipeline-type"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1convert](convert.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  \$1isNumber  |  -  |  -  |  Não  |  Não  |  Não  | 
|  [\$1toBool](toBool.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1toDate](toDate.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1toDecimal](toDecimal.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1toDouble](toDouble.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1toInt](toInt.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1toLong](toLong.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1toObjectId](toObjectId.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1toString](toString.md)  |  Não  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Operadores variáveis
<a name="mongo-apis-aggregation-pipeline-variable"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1let](let.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  [\$1map](map.md)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 

### Operadores diversos
<a name="mongo-apis-aggregation-pipeline-misc"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1getField  |  -  |  -  |  Não  |  Não  |  Não  | 
|  [\$1rand](rand.md)  |  -  |  -  |  Não  |  Sim  |  Não  | 
|  \$1sampleRate  |  -  |  -  |  Não  |  Não  |  Não  | 

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  Inteiro de 32 bit (int)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Inteiro de 64 bits (longo)  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Array  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Dados binários  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Booleano  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Data  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  DBPointer  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  DBRefs  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  Decimal128  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Duplo  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  JavaScript  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  JavaScript(com escopo)  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  MaxKey  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  MinKey  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Null  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Objeto  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  ObjectId  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Expressão Regular  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  String  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Símbolo  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  Timestamp  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Não definido  |  Não  |  Não  |  Não  |  Não  |  Não  | 

## Índices e propriedades de índice
<a name="mongo-apis-index"></a>

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

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


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  2dsphere  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Índice 2d  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  Índice Composto  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Índice com hash  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  Índice de várias chaves  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Índice de campo único  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Índice de texto  |  Não  |  Não  |  Sim  |  Sim  |  Não  | 
|  Curinga  |  Não  |  Não  |  Não  |  Não  |  Não  | 

### Propriedades de índice
<a name="mongo-apis-index-properties"></a>


| Command | 3.6 | 4,0 | 5,0 | 8.0 | Cluster elástico | 
| --- | --- | --- | --- | --- | --- | 
|  Contexto  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Diferenciação entre maiúsculas e minúsculas  |  Não  |  Não  |  Não  |  Sim  |  Não  | 
|  Oculto  |  Não  |  Não  |  Não  |  Não  |  Não  | 
|  Parcial  |  Não  |  Não  |  Sim  |  Sim  |  Não  | 
|  Sparse  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Texto  |  Não  |  Não  |  Sim  |  Sim  |  Não  | 
|  TTL  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Exclusivo  |  Sim  |  Sim  |  Sim  |  Sim  |  Sim  | 
|  Vector  |  Não  |  Não  |  Sim  |  Sim  |  Não  | 

Para obter informações detalhadas sobre operadores específicos do MongoDB, consulte os tópicos a seguir:
+ [Operadores de pipeline de agregação](mongo-apis-aggregation-pipeline-operators.md)
+ [Geoespacial](mongo-apis-geospatial-operators.md)
+ [Operadores de projeção](#mongo-apis-projection-operators)
+ [Operadores de atualização](mongo-apis-update-operators.md)

# Operadores de pipeline de agregação
<a name="mongo-apis-aggregation-pipeline-operators"></a>

Esta seção fornece informações detalhadas sobre operadores de pipeline de agregação suportados pelo Amazon DocumentDB.

**Topics**
+ [\$1\$1DESCEND](DESCEND.md)
+ [\$1\$1KEEP](KEEP.md)
+ [\$1\$1PRUNE](PRUNE.md)
+ [\$1 ROOT](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)
+ [\$1regexMatch](regexMatch.md)
+ [\$1replaceAll](replaceAll.md)
+ [\$1replaceOne](replaceOne.md)
+ [\$1replaceRoot](replaceRoot.md)
+ [\$1 substituir por](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)
+ [\$1toBool](toBool.md)
+ [\$1toDate](toDate.md)
+ [\$1toDecimal](toDecimal.md)
+ [\$1toDouble](toDouble.md)
+ [\$1toInt](toInt.md)
+ [\$1toLong](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)
+ [\$1VectorSearch](vectorSearch.md)
+ [\$1week](week.md)
+ [\$1year](year.md)
+ [\$1zip](zip.md)

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

O `$$DESCEND` operador no Amazon DocumentDB é um operador especial de matriz posicional usado no estágio do `$redact` pipeline. Ele instrui o pipeline de agregação a descer até o documento atual e processar todos os campos, independentemente do nível de aninhamento.

Quando o `$redact` estágio encontra o `$$DESCEND` operador, ele mantém todos os campos do documento atual visíveis e os processa mais adiante. Isso é útil quando você deseja redigir ou remover seletivamente determinados campos com base em uma condição, mantendo a estrutura do documento.

**Parâmetros**

Nenhum.

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

Neste exemplo, usaremos o `$redact` estágio com o `$$DESCEND` operador para exibir seletivamente documentos em que o `code` campo é igual a “Reg”.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$$DESCEND` comando, escolha a guia do idioma que você deseja 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>

A variável `$$KEEP` do sistema é usada com o `$redact` estágio no pipeline de agregação para manter o documento ou campo atual inalterado e incluí-lo na saída.

**Parâmetros**

Nenhum

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

O exemplo a seguir demonstra o uso de `$$KEEP` em um pipeline de agregação do Amazon DocumentDB. Os documentos só são mantidos se o acesso for igual a “público”, caso contrário, eles serão removidos.

**Crie documentos de amostra**

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

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$$KEEP` comando, escolha a guia do idioma que você deseja 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>

A variável `$$PRUNE` do sistema é usada com o `$redact` estágio no pipeline de agregação para excluir documentos ou níveis de documentos incorporados dos resultados. Quando uma condição é avaliada como`$$PRUNE`, o documento ou subdocumento atual é removido da saída. Geralmente é usado com `$$DESCEND` (para manter e percorrer o documento) ou `$$KEEP` (para manter o documento em todos os níveis).

**Parâmetros**

Nenhum. A variável `$$PRUNE` do sistema é usada sem nenhum parâmetro e deve ser usada com`$redact`.

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

O exemplo a seguir demonstra como usar `$$PRUNE` with `$redact` para excluir usuários com mais de 30 anos dos resultados.

**Crie documentos de amostra**

```
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" } }
])
```

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$$PRUNE` comando, escolha a guia do idioma que você deseja 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 ROOT
<a name="ROOT"></a>

O `$ROOT` operador no Amazon DocumentDB é usado para referenciar todo o documento de entrada em um pipeline de agregação. Ele permite que você acesse e manipule o documento completo, incluindo todos os seus campos e estruturas aninhados.

**Parâmetros**

Nenhum

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

Este exemplo demonstra o uso `$ROOT` para criar um registro de auditoria que captura o documento original completo junto com os metadados sobre quando ele foi processado.

**Crie documentos de amostra**

```
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
  }
]);
```

**Exemplo de consulta**

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

**Saída**

```
[
  {
    _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'
  }
]
```

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

Para ver um exemplo de código para usar o `$ROOT` comando, escolha a guia do idioma que você deseja 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>

O `$abs` operador no Amazon DocumentDB retorna o valor absoluto de um número. Ele pode ser usado no pipeline de agregação para realizar operações matemáticas em campos numéricos.

**Parâmetros**
+ `number`: a expressão numérica para a qual o valor absoluto será retornado.

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

Este exemplo demonstra o uso do `$abs` operador para encontrar o valor absoluto de um campo numérico.

**Crie documentos de amostra**

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

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$abs` comando, escolha a guia do idioma que você deseja 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>

O `$add` operador no Amazon DocumentDB é usado para somar números ou datas. Ele pode ser usado para realizar operações aritméticas em campos numéricos ou para realizar aritmética de data adicionando várias unidades de tempo a um campo de data.

**Parâmetros**
+ `expression1`: o primeiro número ou data a ser adicionado.
+ `expression2`: o segundo número ou data a ser adicionado.
+ `expression3`: (opcional) Números ou datas adicionais a serem adicionados.

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

O exemplo a seguir demonstra como usar o `$add` operador para somar dois números.

**Crie documentos de amostra**

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

**Exemplo de consulta**

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

**Saída**

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

Neste exemplo, o `$add` operador é usado para adicionar os valores dos `b` campos `a` e para cada documento e armazenar o resultado no `sum` campo.

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

Para ver um exemplo de código para usar o `$add` comando, escolha a guia do idioma que você deseja 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>

O operador `$addToSet` de agregação retorna uma matriz de valores exclusivos de uma expressão especificada para cada grupo. Ele é usado dentro do `$group` estágio para acumular valores distintos, eliminando automaticamente as duplicatas.

**Parâmetros**
+ `expression`: a expressão a ser avaliada para cada documento no grupo.

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

O exemplo a seguir demonstra o uso do `$addToSet` operador para coletar cidades exclusivas onde os pedidos foram feitos para cada cliente.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o operador de `$addToSet` agregação, escolha a guia do idioma que você deseja 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>

O `$addFields` estágio no pipeline de agregação do Amazon DocumentDB permite que você adicione novos campos computados aos documentos. Isso pode ser útil para adicionar dados derivados ou transformados aos documentos.

**Parâmetros**
+ `newField`: o nome do novo campo a ser adicionado.
+ `expression`: uma expressão que se resolve com o valor do novo campo.

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

O exemplo a seguir demonstra como usar `$addFields` para adicionar um novo campo `TotalInventory` que calcula o estoque total com base nos campos `Inventory.OnHand` e. `Inventory.OrderQnty`

**Crie documentos de amostra**

```
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
  }
]);
```

**Exemplo de consulta**

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

**Saída**

```
[
  {
    "_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
  }
]
```

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

Para ver um exemplo de código para usar o `$addFields` comando, escolha a guia do idioma que você deseja 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>

Novo da versão 4.0

O `$allElementsTrue` operador é usado para verificar se todos os elementos em uma matriz são avaliados como um valor verdadeiro.

**Parâmetros**
+ `expression`: uma expressão que é avaliada como uma matriz.

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

O exemplo a seguir demonstra o uso de `$allElementsTrue` para verificar se todos os elementos em uma matriz são verdadeiros.

**Crie documentos de amostra**

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

**Exemplo de consulta**

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

**Saída**

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

Neste exemplo, a consulta verifica se todos os elementos na `scores` matriz são maiores que 0. O documento com `&quot;name&quot;: &quot;Jane&quot;` é excluído porque a `scores` matriz contém um 0, que é um valor falso.

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

Para ver um exemplo de código para usar o `$allElementsTrue` comando, escolha a guia do idioma que você deseja 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>

O operador `$and` de agregação avalia várias expressões e retorna `true` somente se todas as expressões forem avaliadas como. `true` Se alguma expressão for`false`, ela retornará`false`.

**Parâmetros**
+ `expressions`: uma matriz de expressões para avaliar.

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

O exemplo a seguir demonstra o uso do `$and` operador para verificar se os produtos atendem a vários critérios.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

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

**Saída**

```
[
  { _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 }
]
```

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

Para ver um exemplo de código para usar o operador de `$and` agregação, escolha a guia do idioma que você deseja 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>

Novo da versão 4.0

O `$anyElementTrue` operador é usado para determinar se algum elemento em uma matriz é verdadeiro.

**Parâmetros**
+ `field`: um campo de matriz para avaliar.

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

O exemplo a seguir demonstra o uso de `$anyElementTrue` para verificar se algum elemento em uma matriz é verdadeiro.

**Crie documentos de amostra**

```
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] }
])
```

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$anyElementTrue` comando, escolha a guia do idioma que você deseja 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>

O `$arrayElemAt` operador no Amazon DocumentDB permite que você recupere um elemento de uma matriz de acordo com sua posição no índice. Isso é particularmente útil quando você precisa acessar um elemento específico em um campo de matriz em seus documentos.

**Parâmetros**
+ `array`: a matriz de entrada da qual um elemento deve ser recuperado.
+ `index`: a posição do índice com base em zero do elemento a ser recuperado. Esse valor deve ser um número inteiro não negativo.

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

Neste exemplo, demonstraremos como usar o `$arrayElemAt` operador para recuperar elementos específicos da `flight_miles` matriz na `miles` coleção.

**Crie documentos de amostra**

```
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 ]}
]);
```

**Exemplo de consulta**

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

**Saída**

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

Neste exemplo, usamos o `$arrayElemAt` operador para recuperar o primeiro e o último elementos da `flight_miles` matriz para cada documento.

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

Para ver um exemplo de código para usar o `$arrayElemAt` comando, escolha a guia do idioma que você deseja 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>

O `$arrayToObject` operador no Amazon DocumentDB é o inverso do `$objectToArray` operador. Ele pega uma matriz de documentos de pares de valores-chave e os converte em um único documento. Isso é particularmente útil quando você precisa converter uma matriz de pares de valores-chave novamente em uma estrutura de objeto ou documento.

**Parâmetros**
+ `array expression`: uma expressão que se resolve em uma matriz. Os elementos da matriz devem ser documentos com dois campos: `k` (a chave) e `v` (o valor).

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

O exemplo abaixo demonstra como usar `$arrayToObject` para converter uma matriz de pares de valores-chave em um documento.

**Crie documentos de amostra**

```
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 } }
]);
```

**Exemplo de consulta**

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

**Saída**

```
{ "_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 } }
```

Neste exemplo, o `$objectToArray` operador é usado para converter o `inventory` objeto em uma matriz de pares de valores-chave. O `$arrayToObject` operador é então usado para converter a matriz novamente em um documento, restaurando a estrutura original do objeto.

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

Para ver um exemplo de código para usar o `$arrayToObject` comando, escolha a guia do idioma que você deseja 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>

O operador `$avg` de agregação no Amazon DocumentDB calcula o valor médio da expressão especificada nos documentos que são inseridos no palco. Esse operador é útil para calcular a média de um campo ou expressão numérica em um conjunto de documentos.

**Parâmetros**
+ `expression`: a expressão a ser usada para calcular a média. Isso pode ser um caminho de campo (por exemplo`"$field"`) ou uma expressão (por exemplo`{ $multiply: ["$field1", "$field2"] }`).

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

O exemplo a seguir demonstra como usar o `$avg` operador para calcular a pontuação média em um conjunto de documentos do aluno.

**Crie documentos de amostra**

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

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$avg` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 8.0

Não é compatível com o cluster elástico.

O estágio `$bucket` de agregação no Amazon DocumentDB permite agrupar documentos de entrada em buckets com base em uma expressão e limites de bucket especificados. Isso pode ser útil para analisar dados que se enquadram em determinadas faixas de valores ou categorias.

**Parâmetros**
+ `groupBy`(obrigatório): a expressão que especifica o valor pelo qual agrupar.
+ `boundaries`(obrigatório): uma matriz de valores duplos que define os limites do intervalo. Os documentos são atribuídos a compartimentos com base no valor da `groupBy` expressão que está dentro dos limites especificados.
+ `default`(opcional): um valor literal que é gerado para documentos cujo valor de `groupBy` expressão não se enquadra em nenhum dos limites especificados.
+ `output`(opcional): um objeto que especifica as informações a serem enviadas para cada bucket. Você pode usar operadores de acumulador como`$sum`, `$avg``$min`, e `$max` para calcular agregações para cada bucket.

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

O exemplo a seguir demonstra como usar o `$bucket` estágio para agrupar dados de vendas por faixa de preço.

**Crie documentos de amostra**

```
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") }
]);
```

**Exemplo 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 }
  }
])
```

**Saída**

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

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

Para ver um exemplo de código para usar o `$bucket` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0

O `$ceil` operador no Amazon DocumentDB, assim como no MongoDB, arredonda um número até o número inteiro mais próximo. Isso é útil quando você precisa realizar operações matemáticas em campos numéricos e garantir que o resultado seja um número inteiro.

**Parâmetros**
+ `expression`: A expressão numérica a ser arredondada para cima.

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

Este exemplo demonstra como usar o `$ceil` operador para arredondar um campo numérico.

**Crie documentos de amostra**

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

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$ceil` comando, escolha a guia do idioma que você deseja 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>

Não é compatível com o cluster elástico.

O estágio `$changeStream` de agregação abre um cursor de fluxo de alterações para monitorar as alterações em tempo real em uma coleção. Ele retorna documentos de eventos de alteração quando ocorrem operações de inserção, atualização, substituição ou exclusão.

**Parâmetros**
+ `fullDocument`: especifica se o documento completo deve ser retornado para operações de atualização. As opções são `default` ou `updateLookup`.
+ `resumeAfter`: opcional. Retomar o token para continuar a partir de um ponto específico no fluxo de mudança.
+ `startAtOperationTime`: opcional. Carimbo de data/hora a partir do qual iniciar o fluxo de mudança.
+ `allChangesForCluster`: opcional. Valor booleano. Quando`true`, observa todas as alterações no cluster (para banco de dados administrativo). Quando `false` (padrão), observa somente a coleção especificada.

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

O exemplo a seguir demonstra o uso do `$changeStream` palco para monitorar as alterações em uma coleção.

**Exemplo 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()));
}
```

**Saída**

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

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

Para ver um exemplo de código para usar o estágio de `$changeStream` agregação, escolha a guia do idioma que você deseja 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>

O `$cmp` operador no Amazon DocumentDB é usado para comparar dois valores e retornar um valor inteiro que indica sua ordem relativa. É um operador de comparação que compara duas expressões e retorna um valor inteiro de -1, 0 ou 1, dependendo se o primeiro valor é menor, igual ou maior que o segundo valor, respectivamente.

**Parâmetros**
+ `expression1`: A primeira expressão a ser comparada.
+ `expression2`: A segunda expressão a ser comparada.

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

O exemplo a seguir demonstra o uso do `$cmp` operador para comparar dois valores numéricos.

**Crie documentos de amostra**

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

**Exemplo de consulta**

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

**Saída**

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

Neste exemplo, o `$cmp` operador compara os `value2` campos `value1` e de cada documento. O resultado é:

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

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

Para ver um exemplo de código para usar o `$cmp` comando, escolha a guia do idioma que você deseja usar:

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

Aqui está um exemplo de uso do `$cmp` operador em um aplicativo Node.js com o `mongodb` driver:

```
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 ]

Aqui está um exemplo de uso do `$cmp` operador em um aplicativo Python com o `pymongo` driver:

```
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()
```

A saída dos exemplos do Node.js e do Python será a mesma do exemplo do 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>

Novo a partir da versão 4.0

O estágio `$collStats` de agregação no Amazon DocumentDB fornece estatísticas sobre a coleção especificada, semelhante ao comando `db.collection.stats()` no shell do MongoDB. Esse estágio pode ser usado para recuperar informações sobre a coleção, como o número de documentos, o tamanho total da coleção e várias métricas de desempenho.

**Parâmetros**
+ `latencyStats`: (opcional) Um documento que especifica as opções para coletar estatísticas de latência. Esse parâmetro não é suportado no Amazon DocumentDB.
+ `recordStats`: (opcional) Um documento que especifica as opções para coletar estatísticas de registros. Esse parâmetro não é suportado no Amazon DocumentDB.
+ `queryExecStats`: (opcional) Um documento que especifica as opções para coletar estatísticas de execução da consulta. Esse parâmetro não é suportado no Amazon DocumentDB.

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

O exemplo a seguir demonstra como usar o estágio de `$collStats` agregação para recuperar estatísticas sobre uma coleção nomeada `test` no banco de dados. `db`

**Crie documentos de amostra**

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

**Exemplo de consulta**

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

**Saída**

```
{
  "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)
}
```

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

Para ver um exemplo de código para usar o `$collStats` comando, escolha a guia do idioma que você deseja usar:

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

Aqui está um exemplo de como usar o estágio de `$collStats` agregação em um aplicativo Node.js usando o driver oficial do MongoDB Node.js:

```
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 ]

Aqui está um exemplo de como usar o estágio de `$collStats` agregação em um aplicativo Python usando o PyMongo driver:

```
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>

O operador de `$concat` agregação no Amazon DocumentDB concatena (ou combina) várias sequências de caracteres em um documento para produzir uma única sequência de caracteres que pode ser retornada ao aplicativo. Isso reduz o trabalho realizado no aplicativo, pois a manipulação de strings é realizada no nível do banco de dados.

**Parâmetros**
+ `expression1`: a primeira string a ser concatenada.
+ `expression2`: a segunda string a ser concatenada.
+ `...`: sequências adicionais para concatenar (opcional).

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

Neste exemplo, concatenamos o nome e o sobrenome dos usuários para produzir o nome completo de cada pessoa.

**Crie documentos de amostra**

```
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"}
])
```

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$concat` comando, escolha a guia do idioma que você deseja 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>

O operador `$concatArrays` de agregação no Amazon DocumentDB é usado para concatenar duas ou mais matrizes em uma única matriz. Isso pode ser útil quando você precisa combinar várias matrizes de dados em uma única matriz para processamento ou análise adicionais.

**Parâmetros**
+ `array1`: a primeira matriz a ser concatenada.
+ `array2`: a segunda matriz a ser concatenada.
+ `[array3, ...]`: (opcional) Matrizes adicionais a serem concatenadas.

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

O exemplo a seguir demonstra como usar o `$concatArrays` operador para combinar duas matrizes em uma única matriz.

**Crie documentos de amostra**

```
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"]
  }
]);
```

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$concatArrays` comando, escolha a guia do idioma que você deseja 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>

O `$cond` operador no Amazon DocumentDB é usado para avaliar uma expressão condicional e retornar uma das duas expressões de resultado possíveis.

**Parâmetros**
+ `if`: A expressão booleana a ser avaliada.
+ `then`: a expressão a ser retornada se a `if` expressão for verdadeira.
+ `else`: a expressão a ser retornada se a `if` expressão for falsa.

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

O exemplo a seguir demonstra o uso do `$cond` operador para retornar um valor com base na idade de uma pessoa.

**Crie documentos de amostra**

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

**Exemplo 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"
            }
          }
        }
      }
    }
  }
])
```

**Saída**

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

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

Para ver um exemplo de código para usar o `$cond` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0

O `$convert` operador no Amazon DocumentDB é usado para converter um valor de um tipo de dados para outro. Esse operador é útil quando você precisa realizar operações em dados de diferentes tipos, como converter uma string em um número ou uma data em um timestamp.

**Parâmetros**
+ `to`: o tipo de dados de destino para o qual converter o valor. Os valores compatíveis são `"string"`, `"double"`, `"long"`, `"int"`, `"date"` e `"boolean"`.
+ `from`: o tipo de dados atual do valor. Se não for especificado, o Amazon DocumentDB tentará detectar automaticamente o tipo de dados.
+ `onError`: (opcional) O valor a ser retornado se a conversão falhar. Pode ser um valor específico ou um dos seguintes valores especiais:`"null"`,`"zerofill"`, ou`"error"`.
+ `onNull`: (opcional) O valor a ser retornado se o valor de entrada for`null`. Pode ser um valor específico ou um dos seguintes valores especiais:`"null"`,`"zerofill"`, ou`"error"`.

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

O exemplo a seguir demonstra a conversão de um valor de string em uma data usando o `$convert` operador.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

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

**Saída**

```
[
  { "_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 }
]
```

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

Para ver um exemplo de código para usar o `$convert` comando, escolha a guia do idioma que você deseja 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>

O estágio `$count` de agregação no Amazon DocumentDB é usado para contar o número de documentos que passam para o estágio. Geralmente é usado como o estágio final em um pipeline de agregação para retornar a contagem total de documentos correspondentes aos estágios anteriores.

**Parâmetros**
+ `field`: O campo a ser contado. Esse parâmetro é opcional e, se não for fornecido, o estágio contará o número total de documentos de entrada.

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

O exemplo a seguir demonstra como usar o `$count` palco para obter o número total de documentos em uma coleção.

**Crie documentos de amostra**

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

**Exemplo de consulta**

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

**Saída**

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

O exemplo agrega a `users` coleção e usa o `$count` estágio para contar o número total de documentos.

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

Para ver um exemplo de código para usar o `$count` comando, escolha a guia do idioma que você deseja 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>

O estágio `$currentOp` de agregação retorna informações sobre as operações atualmente em execução no banco de dados. Esse estágio é útil para monitorar consultas e operações ativas em um pipeline de agregação.

**Parâmetros**
+ `allUsers`(opcional): quando definido como`true`, retorna as operações para todos os usuários. O padrão é `false`.
+ `idleConnections`(opcional): quando definido como`true`, inclui conexões inativas. O padrão é `false`.
+ `idleCursors`(opcional): quando definido como`true`, inclui informações sobre cursores inativos. O padrão é `false`.
+ `idleSessions`(opcional): quando definido como`true`, inclui informações sobre sessões ociosas. O padrão é `true`.
+ `localOps`(opcional): quando definido como`true`, inclui operações locais. O padrão é `false`.

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

O exemplo a seguir demonstra o uso do estágio de `$currentOp` agregação para recuperar informações sobre operações de leitura ativas.

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$currentOp` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 5.0

O operador `$dateAdd` de agregação no Amazon DocumentDB permite que você adicione uma duração a um valor de data e hora.

**Parâmetros**
+ `date`: um valor de data e hora ao qual adicionar uma duração.
+ `duration`: a duração a ser adicionada ao `date` valor. Isso pode ser especificado como um objeto com chaves para `years``months`, `weeks``days`,`hours`,`minutes`,, `seconds` e.
+ `timezone`: (opcional) O fuso horário a ser usado ao realizar a adição da data. Se não for especificado, o fuso horário padrão do cluster Amazon DocumentDB será usado.

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

O exemplo a seguir demonstra como usar o `$dateAdd` operador para adicionar 2 dias e 12 horas a uma data.

**Crie documentos de amostra**

```
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") }
]);
```

**Exemplo de consulta**

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

**Saída**

```
[
  {
    "_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)"
  }
]
```

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

Para ver um exemplo de código para usar o `$dateAdd` comando, escolha a guia do idioma que você deseja 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>

Novo da versão 5.0

Não é compatível com o cluster elástico.

O operador `$dateDiff` de agregação calcula a diferença entre duas datas em unidades especificadas. Ele retorna o número de limites de unidades cruzados entre as datas de início e término.

**Parâmetros**
+ `startDate`: A expressão da data inicial.
+ `endDate`: A expressão da data final.
+ `unit`: A unidade de tempo para a diferença. As unidades suportadas são `year` `quarter``month`,`week`,`day`, `hour``minute`,`second`,, `millisecond` e.

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

O exemplo a seguir demonstra como usar o `$dateDiff` operador para calcular o número de dias entre a realização do pedido e a entrega.

**Crie documentos de amostra**

```
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")
  }
]);
```

**Exemplo de consulta**

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

**Saída**

```
[
  {
    _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
  }
]
```

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

Para ver um exemplo de código para usar o `$dateDiff` comando, escolha a guia do idioma que você deseja 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>

O operador `$dateFromString` de agregação no Amazon DocumentDB permite que você converta uma string de data e hora em um objeto de data. Isso é útil quando seus dados são armazenados como cadeias de caracteres, mas você precisa realizar operações com base em datas nos dados.

**Parâmetros**
+ `dateString`: uma sequência de caracteres que representa uma data e hora.
+ `format`: (opcional) Uma string que especifica o formato do`dateString`. Se não for fornecido, o Amazon DocumentDB tentará analisar a string no formato ISO-8601.
+ `timezone`: (opcional) Uma string que especifica o fuso horário. Se não for fornecido, o Amazon DocumentDB usará o fuso horário do servidor.
+ `onError`: (opcional) Especifica a ação a ser tomada se a conversão falhar. Os valores possíveis são `'error'` (o padrão, que gera um erro), `'null'` (retorna`null`) ou `'replace'` (substitui o valor pela string de substituição especificada na `onErrorMessage` opção).
+ `onErrorMessage`: (opcional) Se `onError` estiver definida como`'replace'`, essa opção especifica a sequência de caracteres de substituição.

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

O exemplo a seguir demonstra como usar `$dateFromString` para converter uma string de data em um objeto de data no Amazon DocumentDB.

**Crie documentos de amostra**

```
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"}
]);
```

**Exemplo de consulta**

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

**Saída**

```
[
  {
    "_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")
  }
]
```

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

Para ver um exemplo de código para usar o `$dateFromString` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 5.0

O operador `$dateSubtract` de agregação no Amazon DocumentDB permite que você subtraia uma duração especificada de um valor de data.

**Parâmetros**
+ `date`: uma expressão de data que se transforma em uma data ou carimbo de data/hora.
+ `subtrahend`: uma expressão de duração que especifica a quantidade de tempo a ser subtraída da `date` expressão.
+ `unit`: uma string que especifica a unidade de tempo para a `subtrahend` expressão. As unidades suportadas são “ano”, “trimestre”, “mês”, “semana”, “dia”, “hora”, “minuto”, “segundo” e “milissegundo”.

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

O exemplo a seguir demonstra como usar o `$dateSubtract` operador para calcular a data de um ano atrás a partir da data atual.

**Crie documentos de amostra**

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

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$dateSubtract` comando, escolha a guia do idioma que você deseja 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>

O operador `$dateToString` de agregação no Amazon DocumentDB é usado para converter um valor de data ou timestamp em uma representação de string. Isso é útil quando você precisa formatar a data e a hora de uma forma específica para exibição ou processamento posterior.

**Parâmetros**
+ `date`: o valor da data ou do carimbo de data/hora a ser convertido em uma string.
+ `format`: uma string que especifica o formato no qual a data deve ser representada. A string de formato pode incluir vários especificadores de formato, como `%Y` para o ano de quatro dígitos, `%m` para o mês de dois dígitos, para o dia do mês com dois dígitos etc. `%d`
+ `timezone`: (opcional) O fuso horário a ser usado para a conversão. Se não for especificado, o fuso horário do servidor que hospeda o cluster Amazon DocumentDB será usado.
+ `onNull`: (opcional) O valor a ser retornado se o `date` parâmetro for`null`.

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

O exemplo a seguir demonstra o uso do `$dateToString` operador para formatar o `logDate` campo da `missionLog` coleção.

**Crie documentos de amostra**

```
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") }
]);
```

**Exemplo de consulta**

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

**Saída**

```
[
  {
    "_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"
  }
]
```

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

Para ver um exemplo de código para usar o `$dateToString` comando, escolha a guia do idioma que você deseja usar:

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

Aqui está um exemplo de uso do `$dateToString` operador em um aplicativo 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 ]

Aqui está um exemplo de uso do `$dateToString` operador em um aplicativo 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>

Novo da versão 8.0

Não é compatível com o cluster elástico.

O operador `$dateTrunc` de agregação no Amazon DocumentDB trunca uma data para uma unidade especificada.

**Parâmetros**
+ `date`: uma expressão de data que se transforma em uma data ou carimbo de data/hora.
+ `unit`: uma string que especifica a unidade de tempo para a expressão subtrahend. As unidades suportadas são `year` `quarter``month`,`week`,`day`, `hour``minute`,`second`,, `millisecond` e.

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

O exemplo a seguir demonstra como usar o `$dateTrunc` operador para truncar uma data até a hora.

**Crie documentos de amostra**

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

**Exemplo de consulta**

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

**Saída**

```
[
  {
    _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')
  }
]
```

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

Para ver um exemplo de código para usar o `$dateTrunc` comando, escolha a guia do idioma que você deseja 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>

O operador `$dayOfMonth` de agregação no Amazon DocumentDB recupera o dia do mês (de 1 a 31) de uma determinada data. Esse operador é útil para agrupar, filtrar ou extrair o dia do mês dos campos de data em seus documentos.

**Parâmetros**
+ `date expression`: a expressão de data pode ser um campo de data do documento, um objeto de data ou uma string de data.

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

Este exemplo demonstra como usar o `$dayOfMonth` operador para extrair o dia do mês de um campo de data no documento.

**Crie documentos de amostra**

```
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") }
]);
```

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$dayOfMonth` comando, escolha a guia do idioma que você deseja 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>

O `$dayOfWeek` operador no Amazon DocumentDB extrai o dia da semana de um determinado campo de data. Ele retorna o dia da semana como um número entre 1 (domingo) e 7 (sábado), que é o mesmo comportamento do MongoDB.

**Parâmetros**
+ `date field`: O campo de data do qual extrair o dia da semana.

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

Este exemplo demonstra como usar o `$dayOfWeek` operador para extrair o dia da semana do `date` campo na `weather` coleção.

**Crie documentos de amostra**

```
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")
  }
]);
```

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$dayOfWeek` comando, escolha a guia do idioma que você deseja 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>

O `$dayOfYear` operador no Amazon DocumentDB retorna o dia do ano de uma data como um número entre 1 e 366 (365 em anos não bissextos).

**Parâmetros**
+ `expression`: o campo de data ou expressão do qual extrair o dia do ano.

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

Este exemplo demonstra como usar o `$dayOfYear` operador para extrair o dia do ano de um campo de data em uma coleção do Amazon DocumentDB.

**Crie documentos de amostra**

```
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")
  }
])
```

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$dayOfYear` comando, escolha a guia do idioma que você deseja 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>

O `$divide` operador no pipeline de agregação do Amazon DocumentDB é usado para dividir um número por outro. É um operador útil para realizar operações matemáticas em campos numéricos em seus documentos.

**Parâmetros**
+ `numerator`: O dividendo ou o número a ser dividido.
+ `denominator`: O divisor ou o número pelo qual dividir.

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

Este exemplo demonstra como usar o `$divide` operador para calcular a taxa horária dos funcionários com base no salário anual e no número de horas de trabalho por ano.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$divide` comando, escolha a guia do idioma que você deseja 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>

O operador `$eq` de agregação compara dois valores e retorna `true` se eles forem iguais, caso contrário, retorna. `false`

**Parâmetros**
+ `expression1`: o primeiro valor a ser comparado.
+ `expression2`: O segundo valor a ser comparado.

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

O exemplo a seguir demonstra o uso do `$eq` operador para verificar se as quantidades do produto correspondem aos valores-alvo.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

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

**Saída**

```
[
  { _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 }
]
```

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

Para ver um exemplo de código para usar o operador de `$eq` agregação, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0

O `$exp` operador no Amazon DocumentDB permite que você eleve a constante e para um determinado número.

**Parâmetros**
+ `expression`: A expressão a ser avaliada. Isso pode ser qualquer expressão de agregação válida, incluindo referências de campo, operações aritméticas e outros estágios de agregação.

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

O exemplo a seguir demonstra o uso do `$exp` operador para encontrar todos os documentos em que o `quantity` campo é maior que o `price` campo.

**Crie documentos de amostra**

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

**Exemplo de consulta**

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

**Saída**

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

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

Para ver um exemplo de código para usar o `$exp` comando, escolha a guia do idioma que você deseja 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>

O `$filter` operador no Amazon DocumentDB é usado para aplicar uma expressão de filtro a cada elemento de uma matriz e retornar uma matriz contendo somente os elementos que correspondem à condição especificada. Esse operador é útil quando você precisa realizar operações de filtragem complexas em campos de matriz em seus documentos.

**Parâmetros**
+ `input`: o campo de matriz a ser filtrado.
+ `as`: o nome da variável a ser usada para cada elemento da `input` matriz na `cond` expressão.
+ `cond`: a expressão booleana que determina se um determinado elemento deve ser incluído na matriz de saída.

## Exemplo (MongoDB Shell)
<a name="filter-examples"></a>

O exemplo a seguir demonstra como usar o `$filter` operador para projetar o cliente de cada pedido e criar um novo campo de matriz PaidItems contendo somente os itens da matriz de itens em que o preço é maior que 15. Essencialmente, ele filtra os itens de cada pedido para incluir apenas produtos que custam mais de 15.

**Crie documentos de amostra**

```
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 }
  ]}
]);
```

**Exemplo de consulta**

```
db.orders.aggregate([
  {
    $project: {
      customer: 1,
      paidItems: {
        $filter: {
          input: "$items",
          as: "item",
          cond: { $gt: ["$$item.price", 15] }
        }
      }
    }
  }
]).pretty();
```

**Saída**

```
[
  {
    _id: 1,
    customer: 'abc123',
    paidItems: [ { name: 'Product B', price: 20, qty: 1 } ]
  },
  { _id: 2, customer: 'def456', paidItems: [] },
  { _id: 3, customer: 'ghi789', paidItems: [] }
]
```

## Exemplos de código
<a name="filter-code"></a>

Para ver um exemplo de código para usar o `$filter` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 5.0.

Não é compatível com o cluster elástico.

O `$first` operador no Amazon DocumentDB retorna o primeiro documento de um conjunto agrupado de documentos. É comumente usado em pipelines de agregação para recuperar o primeiro documento que corresponda a uma condição específica.

**Parâmetros**
+ `expression`: a expressão a ser retornada como o primeiro valor em cada grupo.

## Exemplo (MongoDB Shell)
<a name="first-examples"></a>

O exemplo a seguir demonstra o uso do `$first` operador para recuperar o primeiro valor do item encontrado para cada categoria durante a agregação.

Nota: `$first` retorna o primeiro documento com base na ordem atual dos documentos no pipeline. Para garantir um pedido específico (por exemplo, por data, preço etc.), um `$sort` estágio deve ser usado antes do `$group` estágio.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.products.aggregate([
  { $group: { _id: "$category", firstItem: { $first: "$item" } } }
]);
```

**Saída**

```
[
  { "_id" : "food", "firstItem" : "abc" },
  { "_id" : "toy", "firstItem" : "xyz" }
]
```

## Exemplos de código
<a name="first-code"></a>

Para ver um exemplo de código para usar o `$first` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0.

O `$floor` operador no Amazon DocumentDB retorna o maior número inteiro menor ou igual ao número especificado. Esse operador é útil para arredondar valores numéricos.

**Parâmetros**
+ `expression`: A expressão numérica a ser arredondada para baixo.

## Exemplo (MongoDB Shell)
<a name="floor-examples"></a>

O exemplo a seguir demonstra o uso do `$floor` operador para arredondar um valor decimal até o número inteiro mais próximo.

**Crie documentos de amostra**

```
db.numbers.insertOne({ value: 3.14 });
```

**Exemplo de consulta**

```
db.numbers.aggregate([
  { $project: { _id: 0, floored: { $floor: "$value" } } }
]);
```

**Saída**

```
{ "floored" : 3 }
```

## Exemplos de código
<a name="floor-code"></a>

Para ver um exemplo de código para usar o `$floor` comando, escolha a guia do idioma que você deseja 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>

O estágio `$geoNear` de agregação retorna os documentos em ordem de proximidade a um ponto especificado. Ele calcula a distância do ponto e inclui a distância nos documentos de saída.

**Parâmetros**
+ `near`: o ponto a partir do qual calcular distâncias, especificado como GeoJSON ou coordenadas legadas.
+ `distanceField`: o nome do campo para armazenar a distância calculada.
+ `spherical`: Booleano indicando se a geometria esférica deve ser usada (necessária para pontos GeoJSON).
+ `maxDistance`: opcional. Distância máxima do ponto central.
+ `minDistance`: opcional. Distância mínima do ponto central.
+ `query`: opcional. Critérios de filtro adicionais a serem aplicados.
+ `limit`: opcional. Número máximo de documentos a serem devolvidos.
+ `key`: opcional. Campo a ser usado para consulta geoespacial quando existirem vários índices geoespaciais.

## Exemplo (MongoDB Shell)
<a name="geoNear-examples"></a>

O exemplo a seguir demonstra o uso do `$geoNear` palco para encontrar as lojas mais próximas de um determinado local.

**Crie documentos de amostra**

```
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] } }
]);
```

**Exemplo de consulta**

```
db.stores.aggregate([
  {
    $geoNear: {
      near: { type: "Point", coordinates: [-122.4, 37.8] },
      distanceField: "distance",
      spherical: true
    }
  }
]);
```

**Saída**

```
[
  { _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 }
]
```

## Exemplos de código
<a name="geoNear-code"></a>

Para ver um exemplo de código para usar o estágio de `$geoNear` agregação, escolha a guia do idioma que você deseja 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>

O estágio `$group` de agregação no Amazon DocumentDB permite agrupar documentos por meio de uma expressão especificada e realizar várias operações cumulativas nos dados agrupados. Isso pode ser útil para tarefas como calcular totais, médias ou outras estatísticas com base nos dados agrupados.

**Parâmetros**
+ `_id`: especifica a expressão pela qual os documentos de entrada devem ser agrupados. Isso pode ser um nome de campo, uma expressão computada ou uma combinação de ambos.
+ `accumulator expressions`: (opcional) Uma ou mais expressões acumuladoras que devem ser aplicadas aos dados agrupados. Essas expressões usam os operadores acumuladores mencionados acima.

## Exemplo (MongoDB Shell)
<a name="group-examples"></a>

O exemplo a seguir agrupa os clientes por cidade e calcula o valor total do pedido para cada cidade.

**Crie documentos de amostra**

```
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 }] }
]);
```

**Exemplo de consulta**

```
db.customers.aggregate([
  {
    $group: {
      _id: "$city",
      totalOrders: { $sum: { $sum: "$orders.amount" } }
    }
  }
]);
```

**Saída**

```
[
  { _id: 'Chicago', totalOrders: 150 },
  { _id: 'Los Angeles', totalOrders: 450 },
  { _id: 'New York', totalOrders: 500 }
]
```

## Exemplos de código
<a name="group-code"></a>

Para ver um exemplo de código para usar o `$group` comando, escolha a guia do idioma que você deseja 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>

O operador `$gt` de agregação compara dois valores e retorna `true` se o primeiro valor for maior que o segundo, caso contrário, retorna. `false`

**Parâmetros**
+ `expression1`: o primeiro valor a ser comparado.
+ `expression2`: O segundo valor a ser comparado.

## Exemplo (MongoDB Shell)
<a name="gt-aggregation-examples"></a>

O exemplo a seguir demonstra o uso do `$gt` operador para identificar produtos que excedem um limite de preço.

**Crie documentos de amostra**

```
db.products.insertMany([
  { _id: 1, name: "Laptop", price: 1200 },
  { _id: 2, name: "Mouse", price: 25 },
  { _id: 3, name: "Monitor", price: 400 }
]);
```

**Exemplo de consulta**

```
db.products.aggregate([
  {
    $project: {
      name: 1,
      price: 1,
      expensive: { $gt: ["$price", 100] }
    }
  }
]);
```

**Saída**

```
[
  { _id: 1, name: 'Laptop', price: 1200, expensive: true },
  { _id: 2, name: 'Mouse', price: 25, expensive: false },
  { _id: 3, name: 'Monitor', price: 400, expensive: true }
]
```

## Exemplos de código
<a name="gt-aggregation-code"></a>

Para ver um exemplo de código para usar o operador de `$gt` agregação, escolha a guia do idioma que você deseja 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>

O operador `$gte` de agregação compara dois valores e retorna `true` se o primeiro valor for maior ou igual ao segundo, caso contrário, retorna. `false`

**Parâmetros**
+ `expression1`: o primeiro valor a ser comparado.
+ `expression2`: O segundo valor a ser comparado.

## Exemplo (MongoDB Shell)
<a name="gte-aggregation-examples"></a>

O exemplo a seguir demonstra o uso do `$gte` operador para verificar se os alunos foram aprovados em um exame.

**Crie documentos de amostra**

```
db.students.insertMany([
  { _id: 1, name: "Alice", score: 85 },
  { _id: 2, name: "Bob", score: 60 },
  { _id: 3, name: "Charlie", score: 72 }
]);
```

**Exemplo de consulta**

```
db.students.aggregate([
  {
    $project: {
      name: 1,
      score: 1,
      passed: { $gte: ["$score", 70] }
    }
  }
]);
```

**Saída**

```
[
  { _id: 1, name: 'Alice', score: 85, passed: true },
  { _id: 2, name: 'Bob', score: 60, passed: false },
  { _id: 3, name: 'Charlie', score: 72, passed: true }
]
```

## Exemplos de código
<a name="gte-aggregation-code"></a>

Para ver um exemplo de código para usar o operador de `$gte` agregação, escolha a guia do idioma que você deseja 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>

O `$hour` operador extrai o componente de hora de um campo de data ou carimbo de data/hora.

**Parâmetros**
+ `dateExpression`: a data na qual o operador é aplicado. Isso deve ser resolvido para uma data BSON válida (por exemplo, um campo como \$1createdAt ou uma data literal).

Um parâmetro também pode ser especificado como um documento no seguinte formato:

\$1data:`&lt;dateExpression&gt;`, fuso horário:`&lt;timezoneExpression&gt;`\$1

Isso permite aplicar operações de data com reconhecimento de fuso horário.

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

## Exemplo (MongoDB Shell)
<a name="hour-examples"></a>

O exemplo a seguir demonstra como usar o `$hour` operador para extrair o componente de hora de um campo de data e agrupar os dados adequadamente.

**Crie documentos de amostra**

```
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") }
]);
```

**Exemplo de consulta**

```
db.events.aggregate([
  {
    $project: {
      hour: { $hour: "$timestamp" }
    }
  },
  {
    $group: {
      _id: "$hour",
      count: { $sum: 1 }
    }
  },
  {
    $sort: { _id: 1 }
  }
]);
```

**Saída**

```
[
  { "_id": 8, "count": 1 },
  { "_id": 10, "count": 1 },
  { "_id": 12, "count": 1 },
  { "_id": 16, "count": 1 },
  { "_id": 23, "count": 1 }
]
```

Essa consulta agrupa os eventos pelo componente horário do `timestamp` campo e conta o número de eventos para cada hora.

## Exemplos de código
<a name="hour-code"></a>

Para ver um exemplo de código para usar o `$hour` comando, escolha a guia do idioma que você deseja 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>

O `$ifNull` operador é usado para retornar um valor especificado se a expressão de entrada for avaliada como nula ou indefinida. Esse operador pode ser útil em cenários em que você deseja fornecer um valor padrão ou lidar com null/undefined casos.

**Parâmetros**
+ `expression`: A expressão a ser avaliada.
+ `replacement`: o valor a ser retornado se for `<expression>` avaliado como nulo ou indefinido.

## Exemplo (MongoDB Shell)
<a name="ifNull-examples"></a>

O exemplo a seguir demonstra o uso do `$ifNull` operador para fornecer um valor padrão quando o `name` campo é nulo ou indefinido.

**Crie documentos de amostra**

```
db.users.insertMany([
  { _id: 1, name: "John" },
  { _id: 2, name: null },
  { _id: 3 }
]);
```

**Exemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      _id: 1,
      name: { $ifNull: ["$name", "No Name"] }
    }
  }
]);
```

**Saída**

```
[
  { "_id": 1, "name": "John" },
  { "_id": 2, "name": "No Name" },
  { "_id": 3, "name": "No Name" }
]
```

## Exemplos de código
<a name="ifNull-code"></a>

Para ver um exemplo de código para usar o `$ifNull` comando, escolha a guia do idioma que você deseja 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>

O operador `$in` de agregação verifica se existe um valor especificado em uma matriz. Ele retorna `true` se o valor for encontrado na matriz e de `false` outra forma.

**Parâmetros**
+ `value`: O valor a ser pesquisado.
+ `array`: A matriz na qual pesquisar.

## Exemplo (MongoDB Shell)
<a name="in-aggregation-examples"></a>

O exemplo a seguir demonstra o uso do `$in` operador para verificar se existe uma habilidade específica no conjunto de habilidades de cada funcionário.

**Crie documentos de amostra**

```
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"] }
]);
```

**Exemplo de consulta**

```
db.employees.aggregate([
  {
    $project: {
      name: 1,
      hasPython: { $in: ["Python", "$skills"] }
    }
  }
]);
```

**Saída**

```
[
  { _id: 1, name: 'Sarah', hasPython: true },
  { _id: 2, name: 'Mike', hasPython: false },
  { _id: 3, name: 'Emma', hasPython: true }
]
```

## Exemplos de código
<a name="in-aggregation-code"></a>

Para ver um exemplo de código para usar o operador de `$in` agregação, escolha a guia do idioma que você deseja 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>

O `$indexOfArray` operador no Amazon DocumentDB é usado para encontrar o índice da primeira ocorrência de um elemento especificado em uma matriz. Esse operador retorna a posição do índice com base em zero do primeiro elemento na matriz que corresponde ao valor especificado. Se o valor não for encontrado, ele retornará -1.

**Parâmetros**
+ `array`: A matriz a ser pesquisada.
+ `value`: o valor a ser pesquisado na matriz.
+ `start`: (opcional) A posição na matriz a partir da qual iniciar a pesquisa. O valor padrão é 0.

## Exemplo (MongoDB Shell)
<a name="indexOfArray-examples"></a>

O exemplo a seguir demonstra como usar o indexOfArray operador \$1 para encontrar o índice da primeira ocorrência do elemento “manga” na matriz “frutas” de cada documento.

**Crie documentos de amostra**

```
db.collection.insertMany([
  { _id: 1, fruits: ["apple", "banana", "cherry", "durian"] },
  { _id: 2, fruits: ["mango", "orange", "pineapple"] },
  { _id: 3, fruits: ["kiwi", "lemon", "mango"] }
]);
```

**Exemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      _id: 1,
      fruitIndex: { $indexOfArray: ["$fruits", "mango"] }
    }
  }
]);
```

**Saída**

```
{ "_id" : 1, "fruitIndex" : 1 }
{ "_id" : 2, "fruitIndex" : 0 }
{ "_id" : 3, "fruitIndex" : 2 }
```

## Exemplos de código
<a name="indexOfArray-code"></a>

Para ver um exemplo de código para usar o `$indexOfArray` comando, escolha a guia do idioma que você deseja 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>

O indexOfBytes operador \$1 no Amazon DocumentDB é usado para encontrar o índice inicial de uma substring dentro de uma string, com base nas posições dos bytes dos caracteres. Isso pode ser útil ao trabalhar com dados de texto que podem conter caracteres de vários bytes, como aqueles encontrados em scripts não latinos.

**Parâmetros**
+ `string`: A string de entrada a ser pesquisada.
+ `substring`: a substring a ser pesquisada na string de entrada.
+ `[<start>]`: (opcional) A posição inicial (com base em zero) da pesquisa. Se não for especificado, a pesquisa começa no início da string.

## Exemplo (MongoDB Shell)
<a name="indexOfBytes-examples"></a>

O exemplo a seguir demonstra o uso de `$indexOfBytes` para encontrar o índice do primeiro caractere de hífen em um conjunto de cadeias de caracteres representando a localização das mesas.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.people.aggregate([
  { $project: { stateLocation: { $indexOfBytes: ["$Desk", "-"] } } }
]);
```

**Saída**

```
{ "_id" : 1, "stateLocation" : 11 }
{ "_id" : 2, "stateLocation" : 6 }
{ "_id" : 3, "stateLocation" : 7 }
{ "_id" : 4, "stateLocation" : 8 }
```

## Exemplos de código
<a name="indexOfBytes-code"></a>

Para ver um exemplo de código para usar o `$indexOfBytes` comando, escolha a guia do idioma que você deseja 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>

O `$indexOfCP` operador no Amazon DocumentDB é usado para encontrar o índice, em pontos de código (CP), da primeira ocorrência de uma substring especificada em uma expressão de string. Isso pode ser útil ao analisar e extrair conteúdo de campos de string.

**Parâmetros**
+ `string expression`: A string a ser pesquisada.
+ `substring`: A substring a ser pesquisada.
+ `[<start>]`: (opcional) A posição para iniciar a pesquisa (índice baseado em zero). O padrão é 0.

## Exemplo (MongoDB Shell)
<a name="indexOfCP-examples"></a>

Neste exemplo, usamos o `$indexOfCP` operador para encontrar o índice da primeira ocorrência do caractere hífen - no campo Mesa de cada documento.

**Crie documentos de amostra**

```
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"}
])
```

**Exemplo de consulta**

```
db.people.aggregate([
  { $project: { stateLocation: { $indexOfCP: [ "$Desk", "-"] } } }
])
```

**Saída**

```
{ "_id" : 1, "stateLocation" : 10 }
{ "_id" : 2, "stateLocation" : 6 }
{ "_id" : 3, "stateLocation" : 7 }
{ "_id" : 4, "stateLocation" : 8 }
```

## Exemplos de código
<a name="indexOfCP-code"></a>

Para ver um exemplo de código para usar o `$indexOfCP` comando, escolha a guia do idioma que você deseja 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>

O estágio `$indexStats` de agregação no Amazon DocumentDB fornece uma visão sobre o uso de índices em uma coleção. Esse operador permite monitorar os padrões de acesso de seus índices, o que pode ajudá-lo a tomar decisões informadas sobre gerenciamento e otimização de índices.

**Parâmetros**

Nenhum

## Exemplo (MongoDB Shell)
<a name="indexStats-examples"></a>

O exemplo a seguir demonstra como usar o `$indexStats` operador para analisar o uso do índice em uma coleção do Amazon DocumentDB.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.grocery.aggregate([
  { $indexStats: {} }
]);
```

**Saída**

```
[
  {
    "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")
    }
  }
]
```

Neste exemplo, o `$indexStats` operador mostra que o `_id_` índice foi acessado 5 vezes e o `product_1` índice foi acessado 10 vezes desde a última reinicialização ou reinicialização do servidor.

## Exemplos de código
<a name="indexStats-code"></a>

Para ver um exemplo de código para usar o `$indexStats` comando, escolha a guia do idioma que você deseja 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>

O `$isArray` operador no Amazon DocumentDB é usado para verificar se um campo em um documento é uma matriz. Esse operador pode ser útil em pipelines de agregação e expressões condicionais para lidar com campos do tipo matriz.

**Parâmetros**
+ `field`: o caminho do campo para verificar se é uma matriz.

## Exemplo (MongoDB Shell)
<a name="isArray-examples"></a>

Este exemplo demonstra como usar o `$isArray` operador para identificar documentos nos quais o campo “inventário” é uma matriz.

**Crie documentos de amostra**

```
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}]}
]);
```

**Exemplo de consulta**

```
db.videos.aggregate([
  {
    $match: {
      $isArray: "$inventory"
    }
  },
  {
    $project: {
      _id: 1,
      name: 1,
      "inventory.location": 1,
      "inventory.count": 1
    }
  }
]).pretty();
```

**Saída**

```
{
  "_id": 4,
  "name": "Bravemind",
  "inventory": [
    {
      "location": "Mason City",
      "count": 250
    },
    {
      "location": "Des Moines",
      "count": 1000
    },
    {
      "location": "Ames",
      "count": 500
    }
  ]
}
```

## Exemplos de código
<a name="isArray-code"></a>

Para ver um exemplo de código para usar o `$isArray` comando, escolha a guia do idioma que você deseja 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>

O `$isoDayOfWeek` operador no Amazon DocumentDB retorna o dia ISO da semana de uma data como um valor inteiro. O sistema ISO de datas semanais define cada semana começando na segunda-feira e terminando no domingo, com a semana 1 sendo a semana que contém a primeira quinta-feira do ano.

**Parâmetros**
+ `expression`: a expressão de data para a qual retornar o dia ISO da semana.

## Exemplo (MongoDB Shell)
<a name="isoDayOfWeek-examples"></a>

O exemplo a seguir demonstra como usar o `$isoDayOfWeek` operador para recuperar o dia ISO da semana para um conjunto de documentos de eventos.

**Crie documentos de amostra**

```
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") }
]);
```

**Exemplo de consulta**

```
db.events.aggregate([
  { $project: {
    _id: 1,
    eventDate: 1,
    isoDayOfWeek: { $isoDayOfWeek: "$eventDate" }
  }}
]);
```

**Saída**

```
[
  { "_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 }
]
```

## Exemplos de código
<a name="isoDayOfWeek-code"></a>

Para ver um exemplo de código para usar o `$isoDayOfWeek` comando, escolha a guia do idioma que você deseja 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>

O `$isoWeek` operador no Amazon DocumentDB retorna o número ISO da semana de uma data. O sistema de data da semana ISO é uma forma de numerar as semanas em um ano, em que a primeira semana de um novo ano é a semana que contém a primeira quinta-feira desse ano. Isso é diferente do calendário gregoriano, em que a primeira semana de um novo ano é a semana que contém 1º de janeiro.

**Parâmetros**

Nenhum

## Exemplo (MongoDB Shell)
<a name="isoWeek-examples"></a>

O exemplo a seguir demonstra como usar o `$isoWeek` operador para recuperar o número da semana ISO de uma determinada data.

**Crie documentos de amostra**

```
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") }
])
```

**Exemplo de consulta**

```
db.dates.aggregate([
  {
    $project: {
      _id: 1,
      isoWeek: { $isoWeek: "$date" }
    }
  }
])
```

**Saída**

```
[
  { "_id": 1, "isoWeek": 52 },
  { "_id": 2, "isoWeek": 52 },
  { "_id": 3, "isoWeek": 1 }
]
```

## Exemplos de código
<a name="isoWeek-code"></a>

Para ver um exemplo de código para usar o `$isoWeek` comando, escolha a guia do idioma que você deseja 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>

O `$isoWeekYear` operador no Amazon DocumentDB retorna o número do ano da semana ISO 8601 para uma determinada data. O número ISO do ano semanal difere do ano civil gregoriano, pois o ano da semana pode ser diferente do ano civil, especialmente no início e no final do ano.

**Parâmetros**
+ `expression`: a expressão de data para a qual retornar o número do ano da semana ISO 8601.

## Exemplo (MongoDB Shell)
<a name="isoWeekYear-examples"></a>

Este exemplo demonstra como usar o `$isoWeekYear` operador para recuperar o ano da semana ISO 8601 para o campo de data de cada documento na coleção de eventos.

**Crie documentos de amostra**

```
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") }
]);
```

**Exemplo de consulta**

```
db.events.aggregate([
  { $project: {
    name: 1,
    isoWeekYear: { $isoWeekYear: "$date" }
  }}
]);
```

**Saída**

```
[
  { "_id" : 1, "name" : "Event 1", "isoWeekYear" : 2023 },
  { "_id" : 2, "name" : "Event 2", "isoWeekYear" : 2023 },
  { "_id" : 3, "name" : "Event 3", "isoWeekYear" : 2023 }
]
```

## Exemplos de código
<a name="isoWeekYear-code"></a>

Para ver um exemplo de código para usar o `$isoWeekYear` comando, escolha a guia do idioma que você deseja 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>

O `$last` operador no Amazon DocumentDB é usado para retornar o último elemento em uma matriz que corresponda aos critérios da consulta. É particularmente útil para recuperar o elemento mais recente ou o último em uma matriz que satisfaça uma condição específica.

**Parâmetros**
+ `expression`: a expressão que corresponde aos elementos da matriz.

## Exemplo (MongoDB Shell)
<a name="last-examples"></a>

O exemplo a seguir demonstra o uso do `$last` operador em combinação com `$filter` para recuperar o último elemento de uma matriz que atende a uma condição específica (por exemplo, o assunto é 'ciência').

**Crie documentos de amostra**

```
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 }
    ]
  }
]);
```

**Exemplo de consulta**

```
db.collection.aggregate([
    { $match: { name: "John" } },
    {
      $project: {
        name: 1,
        lastScienceScore: {
          $last: {
            $filter: {
              input: "$scores",
              as: "score",
              cond: { $eq: ["$$score.subject", "science"] }
            }
          }
        }
      }
    }
  ]);
```

**Saída**

```
[
  {
    _id: 1,
    name: 'John',
    lastScienceScore: { subject: 'science', score: 90 }
  }
]
```

## Exemplos de código
<a name="last-code"></a>

Para ver um exemplo de código para usar o `$last` comando, escolha a guia do idioma que você deseja 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>

O `$let` operador no Amazon DocumentDB é usado para vincular variáveis a valores e usar essas variáveis na expressão. Ele permite que você defina variáveis locais que podem ser usadas em expressões subsequentes no mesmo estágio do pipeline de agregação.

**Parâmetros**
+ `vars`: um objeto que define as variáveis a serem usadas na expressão.
+ `in`: a expressão na qual as variáveis definidas no parâmetro vars são usadas.

## Exemplo (MongoDB Shell)
<a name="let-examples"></a>

Este exemplo demonstra o uso do `$let` operador para calcular a área de um retângulo.

**Crie documentos de amostra**

```
db.shapes.insertMany([
  { name: "Rectangle 1", length: 5, width: 3 },
  { name: "Rectangle 2", length: 7, width: 4 },
  { name: "Rectangle 3", length: 6, width: 2 }
]);
```

**Exemplo de consulta**

```
db.shapes.aggregate([
  {
    $project: {
      name: 1,
      area: {
        $let: {
          vars: {
            length: "$length",
            width: "$width"
          },
          in: {
            $multiply: ["$$length", "$$width"]
          }
        }
      }
    }
  }
])
```

**Saída**

```
[
  {
    "_id": ObjectId("6161e5b1a3eba3c7f2960d03"),
    "name": "Rectangle 1",
    "area": 15
  },
  {
    "_id": ObjectId("6161e5b1a3eba3c7f2960d04"),
    "name": "Rectangle 2",
    "area": 28
  },
  {
    "_id": ObjectId("6161e5b1a3eba3c7f2960d05"),
    "name": "Rectangle 3",
    "area": 12
  }
]
```

## Exemplos de código
<a name="let-code"></a>

Para ver um exemplo de código para usar o `$let` comando, escolha a guia do idioma que você deseja 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>

O `$limit` operador no Amazon DocumentDB é usado para restringir o número de documentos retornados por uma consulta. É semelhante ao operador `$limit` MongoDB, mas há algumas considerações específicas ao usá-lo com o Amazon DocumentDB.

No Amazon DocumentDB, o `$limit` operador é útil para paginação, onde você deseja recuperar um subconjunto do total de documentos correspondentes. Ele permite que você controle o número de documentos retornados em cada resposta, melhorando o desempenho e reduzindo a quantidade de dados transferidos pela rede.

**Parâmetros**
+ `limit`: O número máximo de documentos a serem devolvidos. Esse deve ser um valor inteiro não negativo.

## Exemplo (MongoDB Shell)
<a name="limit-examples"></a>

O exemplo a seguir demonstra como usar o `$limit` operador para retornar no máximo um documento que corresponda ao filtro especificado.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.test.createIndex({ comments: "text" });

db.test.find({
  $and: [
    { star_rating: 5 },
    { $text: { $search: "couch" } }
  ]
}).limit(1);
```

**Saída**

```
[ { _id: 2, star_rating: 5, comments: 'comfortable couch' } ]
```

## Exemplos de código
<a name="limit-code"></a>

Para ver um exemplo de código para usar o `$limit` comando, escolha a guia do idioma que você deseja 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>

O `$literal` operador no Amazon DocumentDB é usado para representar um valor literal em um estágio do pipeline de agregação. Ele permite que você inclua um valor específico, como um número, string ou booleano, sem interpretá-lo como uma referência de campo ou expressão.

Esse operador é particularmente útil quando você precisa incluir um valor literal como parte de um pipeline de agregação mais complexo, como ao criar filtros de consulta dinâmicos ou realizar cálculos.

**Parâmetros**

Nenhum

## Exemplo (MongoDB Shell)
<a name="literal-examples"></a>

O exemplo a seguir demonstra o uso do `$literal` operador para incluir um valor literal em um pipeline de agregação. O `$literal` operador é usado para incluir o valor 18 como um valor literal na expressão \$1gt. Isso permite que o pipeline de agregação compare o campo de idade com o valor literal 18 para determinar se a pessoa é adulta.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      name: 1,
      age: 1,
      city: 1,
      isAdult: { $gt: ["$age", { $literal: 18 }] }
    }
  }
]);
```

**Saída**

```
[
  {
    "_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
  }
]
```

## Exemplos de código
<a name="literal-code"></a>

Para ver um exemplo de código para usar o `$literal` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0.

O `$ln` operador no Amazon DocumentDB calcula o logaritmo natural (base e) de um número especificado. Ele retorna o logaritmo do número para a base e.

**Parâmetros**
+ `expression`: O número para o qual o logaritmo natural será calculado.

## Exemplo (MongoDB Shell)
<a name="ln-examples"></a>

O exemplo a seguir demonstra o uso do `$log` operador para calcular o logaritmo natural de um número.

**Crie documentos de amostra**

```
db.numbers.insertMany([
  { _id: 1, value: 10 },
  { _id: 2, value: 100 },
  { _id: 3, value: 1000 }
]);
```

**Exemplo de consulta**

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

**Saída**

```
[
  { "_id" : 1, "naturalLog" : 2.302585092994046 },
  { "_id" : 2, "naturalLog" : 4.605170185988092 },
  { "_id" : 3, "naturalLog" : 6.907755278982137 }
]
```

## Exemplos de código
<a name="ln-code"></a>

Para ver um exemplo de código para usar o `$ln` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0.

O `$log` operador no Amazon DocumentDB calcula o logaritmo natural de um número. Ele retorna o logaritmo de base e do número especificado.

**Parâmetros**
+ `expression`: O número para o qual o logaritmo natural será calculado.
+ `base`: Valor base para calcular o log.

## Exemplo (MongoDB Shell)
<a name="log-examples"></a>

O exemplo a seguir demonstra o uso do `$log` operador para calcular o logaritmo natural de um número.

**Crie documentos de amostra**

```
db.numbers.insertMany([
  { _id: 1, value: 10 },
  { _id: 2, value: 100 },
  { _id: 3, value: 1000 }
]);
```

**Exemplo de consulta**

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

**Saída**

```
[
  { "_id" : 1, "naturalLog" : 1 },
  { "_id" : 2, "naturalLog" : 2 },
  { "_id" : 3, "naturalLog" : 2.9999999999999996 }
]
```

## Exemplos de código
<a name="log-code"></a>

Para ver um exemplo de código para usar o `$log` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0.

O `$log10` operador no Amazon DocumentDB é usado para calcular o logaritmo de base 10 de um número. É útil para realizar cálculos logarítmicos em campos numéricos dentro do pipeline de agregação.

**Parâmetros**
+ `expression`: a expressão numérica para a qual o logaritmo de base 10 deve ser calculado.

## Exemplo (MongoDB Shell)
<a name="log10-examples"></a>

O exemplo a seguir demonstra como usar o `$log10` operador para calcular o logaritmo de base 10 de um campo numérico.

**Crie documentos de amostra**

```
db.numbers.insertMany([
  { _id: 1, value: 1 },
  { _id: 2, value: 10 },
  { _id: 3, value: 100 },
  { _id: 4, value: 1000 }
]);
```

**Exemplo de consulta**

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

**Saída**

```
[
  { "_id": 1, "log10Value": 0 },
  { "_id": 2, "log10Value": 1 },
  { "_id": 3, "log10Value": 2 },
  { "_id": 4, "log10Value": 3 }
]
```

## Exemplos de código
<a name="log10-code"></a>

Para ver um exemplo de código para usar o `$log10` comando, escolha a guia do idioma que você deseja 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>

O operador `$lt` de agregação compara dois valores e retorna `true` se o primeiro valor for menor que o segundo, caso contrário, retorna. `false`

**Parâmetros**
+ `expression1`: o primeiro valor a ser comparado.
+ `expression2`: O segundo valor a ser comparado.

## Exemplo (MongoDB Shell)
<a name="lt-aggregation-examples"></a>

O exemplo a seguir demonstra o uso do `$lt` operador para identificar itens com baixo estoque.

**Crie documentos de amostra**

```
db.warehouse.insertMany([
  { _id: 1, item: "Bolts", stock: 5 },
  { _id: 2, item: "Nuts", stock: 25 },
  { _id: 3, item: "Screws", stock: 8 }
]);
```

**Exemplo de consulta**

```
db.warehouse.aggregate([
  {
    $project: {
      item: 1,
      stock: 1,
      lowStock: { $lt: ["$stock", 10] }
    }
  }
]);
```

**Saída**

```
[
  { _id: 1, item: 'Bolts', stock: 5, lowStock: true },
  { _id: 2, item: 'Nuts', stock: 25, lowStock: false },
  { _id: 3, item: 'Screws', stock: 8, lowStock: true }
]
```

## Exemplos de código
<a name="lt-aggregation-code"></a>

Para ver um exemplo de código para usar o operador de `$lt` agregação, escolha a guia do idioma que você deseja 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>

O operador `$lte` de agregação compara dois valores e retorna `true` se o primeiro valor for menor ou igual ao segundo, caso contrário, retorna. `false`

**Parâmetros**
+ `expression1`: o primeiro valor a ser comparado.
+ `expression2`: O segundo valor a ser comparado.

## Exemplo (MongoDB Shell)
<a name="lte-aggregation-examples"></a>

O exemplo a seguir demonstra o uso do `$lte` operador para identificar itens econômicos.

**Crie documentos de amostra**

```
db.menu.insertMany([
  { _id: 1, dish: "Salad", price: 8 },
  { _id: 2, dish: "Pasta", price: 12 },
  { _id: 3, dish: "Soup", price: 6 }
]);
```

**Exemplo de consulta**

```
db.menu.aggregate([
  {
    $project: {
      dish: 1,
      price: 1,
      affordable: { $lte: ["$price", 10] }
    }
  }
]);
```

**Saída**

```
[
  { _id: 1, dish: 'Salad', price: 8, affordable: true },
  { _id: 2, dish: 'Pasta', price: 12, affordable: false },
  { _id: 3, dish: 'Soup', price: 6, affordable: true }
]
```

## Exemplos de código
<a name="lte-aggregation-code"></a>

Para ver um exemplo de código para usar o operador de `$lte` agregação, escolha a guia do idioma que você deseja 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>

O estágio `$lookup` de agregação no Amazon DocumentDB permite que você realize uma junção externa esquerda entre duas coleções. Essa operação permite combinar dados de várias coleções com base nos valores de campo correspondentes. É particularmente útil quando você precisa incorporar dados de coleções relacionadas aos resultados da consulta.

**Parâmetros**
+ `from`: O nome da coleção com a qual realizar a junção.
+ `localField`: o campo dos documentos de entrada para comparar com `foreignField` o.
+ `foreignField`: O campo dos documentos na `from` coleção para comparar com `localField` o.
+ `as`: o nome do novo campo a ser adicionado aos documentos de saída contendo os documentos correspondentes da `from` coleção.

## Exemplo (MongoDB Shell)
<a name="lookup-examples"></a>

O exemplo a seguir demonstra uma `$lookup` operação simples que une dados da `orders` coleção à `customers` coleção.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.customers.aggregate([
  {
    $lookup: {
      from: "orders",           
      localField: "_id",        
      foreignField: "customer_id", 
      as: "orders" 
    }
  }
]);
```

**Saída**

```
[
  {
    _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 } ]
  }
]
```

## Exemplos de código
<a name="lookup-code"></a>

Para ver um exemplo de código para usar o `$lookup` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0.

Não é compatível com o cluster elástico.

O `$ltrim` operador no Amazon DocumentDB é usado para remover caracteres iniciais de uma string. Por padrão, ele remove os caracteres de espaço em branco iniciais, mas você também pode especificar um conjunto de caracteres a serem removidos passando o argumento chars.

**Parâmetros**
+ `input`: a string de entrada da qual remover os caracteres de espaço em branco iniciais.
+ `chars`: (opcional) Para remover caracteres específicos.

## Exemplo (MongoDB Shell)
<a name="ltrim-examples"></a>

O exemplo a seguir demonstra o uso de `$ltrim` para remover caracteres especificados (” \$1”) do início de uma string.

**Crie documentos de amostra**

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

**Exemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      _id: 0,
      name: {
        $ltrim: { input: "$name", chars: " *" }  
      },
      age: 1
    }
  }
]);
```

**Saída**

```
[
  { "name": "John Doe", "age": 30 },
  { "name": "Jane Doe ", "age": 25 },
  { "name": "Bob Smith  ", "age": 35 }
]
```

## Exemplos de código
<a name="ltrim-code"></a>

Para ver um exemplo de código para usar o `$ltrim` comando, escolha a guia do idioma que você deseja 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>

O `$map` operador no Amazon DocumentDB permite que você aplique uma expressão específica a cada elemento em uma matriz e retorne uma nova matriz com os elementos transformados. Esse operador é particularmente útil para manipular e transformar dados em matrizes, o que pode ajudar a simplificar o código do aplicativo e melhorar o desempenho das consultas, elevando o processamento da matriz ao nível do banco de dados.

**Parâmetros**
+ `input`: A matriz a ser transformada.
+ `as`: (opcional) O nome da variável a ser usada na expressão in para representar o elemento atual que está sendo processado.
+ `in`: a expressão a ser aplicada a cada elemento na matriz de entrada.

## Exemplo (MongoDB Shell)
<a name="map-examples"></a>

O exemplo a seguir demonstra como usar o operador \$1map para transformar uma matriz de números, dobrando cada valor.

**Crie documentos de amostra**

```
db.collection.insertMany([
  { _id: 1, numbers: [1, 2, 3, 4, 5] },
  { _id: 2, numbers: [10, 20, 30, 40, 50] }
])
```

**Exemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      doubledNumbers: { $map: { input: "$numbers", as: "num", in: { $multiply: ["$$num", 2] } } }
    }
  }
])
```

**Saída**

```
[
  { _id: 1, doubledNumbers: [2, 4, 6, 8, 10] },
  { _id: 2, doubledNumbers: [20, 40, 60, 80, 100] }
]
```

## Exemplos de código
<a name="map-code"></a>

Para ver um exemplo de código para usar o `$map` comando, escolha a guia do idioma que você deseja 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>

O estágio de `$match` pipeline no Amazon DocumentDB é usado para filtrar os documentos de entrada somente para aqueles que correspondem aos critérios de consulta especificados. É um dos estágios de pipeline mais usados em operações de agregação. O `$match` estágio é aplicado antes de qualquer outro estágio do pipeline, permitindo que você reduza com eficiência o número de documentos que precisam ser processados nos estágios subsequentes.

**Parâmetros**
+ `query`: um documento que expressa os critérios de seleção para a operação. O documento de consulta usa a mesma sintaxe do `find()` método.

## Exemplo (MongoDB Shell)
<a name="match-examples"></a>

O exemplo a seguir demonstra o uso do `$match` estágio para filtrar documentos com base em um valor de campo específico.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.collection.aggregate([
  { $match: { age: { $gt: 30 } } },
  { $project: { _id: 1, name: 1, city: 1 } }
]);
```

**Saída**

```
[
  { "_id": 3, "name": "Bob", "city": "Chicago" },
  { "_id": 4, "name": "Alice", "city": "Miami" }
]
```

O `$match` estágio filtra os documentos para incluir somente aqueles em que o `age` campo é maior que 30.

## Exemplos de código
<a name="match-code"></a>

Para ver um exemplo de código para usar o `$match` comando, escolha a guia do idioma que você deseja 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>

O estágio `$max` de agregação é usado para retornar o valor máximo de um campo especificado em todos os documentos em um estágio de pipeline. Esse operador é útil para encontrar o valor mais alto em um conjunto de documentos.

**Parâmetros**
+ `expression`: a expressão a ser usada para calcular o valor máximo.

## Exemplo (MongoDB Shell)
<a name="max-examples"></a>

O exemplo a seguir demonstra como usar o `$max` operador para encontrar a pontuação máxima em uma coleção de documentos do aluno. O `$group` estágio agrupa todos os documentos e o `$max` operador é usado para calcular o valor máximo do `score` campo em todos os documentos.

**Crie documentos de amostra**

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

**Exemplo de consulta**

```
db.students.aggregate([
  { $group: { _id: null, maxScore: { $max: "$score" } } },
  { $project: { _id: 0, maxScore: 1 } }
])
```

**Saída**

```
[ { maxScore: 92 } ]
```

## Exemplos de código
<a name="max-code"></a>

Para ver um exemplo de código para usar o `$max` comando, escolha a guia do idioma que você deseja 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>

O operador `$meta` de agregação acessa os metadados associados aos documentos em um pipeline de agregação. É comumente usado para recuperar pontuações de pesquisa de texto e classificar os resultados por relevância.

**Parâmetros**
+ `textScore`: recupera a pontuação da pesquisa de texto indicando a relevância do documento para a consulta de pesquisa.

## Exemplo (MongoDB Shell)
<a name="meta-aggregation-examples"></a>

O exemplo a seguir demonstra o uso do `$meta` operador em um pipeline de agregação para recuperar e classificar por pontuações de pesquisa de texto.

**Crie documentos de amostra**

```
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." }
]);
```

**Exemplo de consulta**

```
db.articles.aggregate([
  { $match: { $text: { $search: "Python" } } },
  { $addFields: { score: { $meta: "textScore" } } },
  { $sort: { score: -1 } }
]);
```

**Saída**

```
[
  {
    _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
  }
]
```

## Exemplos de código
<a name="meta-aggregation-code"></a>

Para ver um exemplo de código para usar o operador de `$meta` agregação, escolha a guia do idioma que você deseja 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>

Introduzido na versão 8.0

O estágio `$merge` de agregação no Amazon DocumentDB é usado para mesclar os resultados do estágio anterior do pipeline em uma coleção de destino. Isso é útil para atualizar ou inserir documentos em uma coleção de destino com base nos dados dos documentos de entrada.

O `$merge` estágio permite que você execute várias ações com base na condição de correspondência entre os documentos de entrada e a coleção de destino, como:

```
- Insert new documents
- Update existing documents
- Delete documents
- Fail the operation if there are any conflicts
```

**Parâmetros**
+ `into`: (obrigatório) O nome da coleção de destino na qual mesclar os documentos de entrada.
+ `on`: (obrigatório) Os campos a serem usados como condição de correspondência entre os documentos de entrada e a coleção de destino.
+ `whenMatched`: (opcional) A ação a ser executada quando o documento de entrada corresponde a um documento existente na coleção de destino. Os valores compatíveis são: `"merge"`, `"replace"`, `"keepExisting"` e `"fail"`.
+ `whenNotMatched`: (opcional) A ação a ser executada quando o documento de entrada não corresponde a nenhum documento na coleção de destino. Os valores suportados são: `"insert"` `"fail"` e.

## Exemplo (MongoDB Shell)
<a name="merge-examples"></a>

O exemplo a seguir demonstra como usar o `$merge` estágio para atualizar uma `users` coleção com novos dados de um pipeline de entrada.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.inputData.aggregate([
  {
    $merge: {
      into: "users",
      on: "_id",
      whenMatched: "merge",
      whenNotMatched: "insert"
    }
  }
])
```

**Saída**

Depois de executar o `$merge` pipeline, a `users` coleção conterá os seguintes 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" }
]
```

## Exemplos de código
<a name="merge-code"></a>

Para ver um exemplo de código para usar o `$merge` comando, escolha a guia do idioma que você deseja usar:

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

Aqui está um exemplo de uso do operador \$1merge em um aplicativo 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 ]

Aqui está um exemplo de uso do operador \$1merge em um aplicativo 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>

O `$mergeObjects` operador no Amazon DocumentDB é usado para combinar vários documentos ou objetos em um único documento. Esse operador é particularmente útil quando você precisa mesclar o conteúdo de dois ou mais documentos ou objetos, potencialmente substituindo valores de um objeto pelos de outro.

**Parâmetros**
+ `expression1`: o primeiro objeto a ser mesclado.
+ `expression2`: (opcional) O segundo objeto a ser mesclado.
+ `expression3`: (opcional) Objetos adicionais a serem mesclados.

## Exemplo (MongoDB Shell)
<a name="mergeObjects-examples"></a>

O exemplo a seguir demonstra como usar o `$mergeObjects` operador para combinar dois objetos.

**Crie documentos de amostra**

```
db.collection.insertMany([
  { "_id": 1, "name": "John", "address": { "city": "New York", "state": "NY" } },
  { "_id": 2, "name": "Jane", "address": { "city": "Los Angeles", "state": "CA" } }
]);
```

**Exemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      "combinedAddress": {
        $mergeObjects: ["$address", { "country": "USA" }]
      }
    }
  }
])
```

**Saída**

```
[
  {
    "_id": 1,
    "combinedAddress": {
      "city": "New York",
      "state": "NY",
      "country": "USA"
    }
  },
  {
    "_id": 2,
    "combinedAddress": {
      "city": "Los Angeles",
      "state": "CA",
      "country": "USA"
    }
  }
]
```

## Exemplos de código
<a name="mergeObjects-code"></a>

Para ver um exemplo de código para usar o `$mergeObjects` comando, escolha a guia do idioma que você deseja 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>

O `$millisecond` operador no Amazon DocumentDB é usado para extrair a parte de milissegundos de um valor de data.

**Parâmetros**

Nenhum

## Exemplo (MongoDB Shell)
<a name="millisecond-examples"></a>

Este exemplo demonstra como usar o `$millisecond` operador para extrair a parte de milissegundos de um valor de data.

**Crie documentos de amostra**

```
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")
  }
])
```

**Exemplo de consulta**

```
db.events.aggregate([
  {
    $project: {
      name: 1,
      milliseconds: { $millisecond: "$timestamp" }
    }
  }
])
```

**Saída**

```
[
  {
    "_id": ObjectId("644332a42054ed1b0d15f0c1"),
    "name": "Event 1",
    "milliseconds": 123
  },
  {
    "_id": ObjectId("644332a42054ed1b0d15f0c2"),
    "name": "Event 2",
    "milliseconds": 456
  },
  {
    "_id": ObjectId("644332a42054ed1b0d15f0c3"),
    "name": "Event 3",
    "milliseconds": 789
  }
]
```

## Exemplos de código
<a name="millisecond-code"></a>

Para ver um exemplo de código para usar o `$millisecond` comando, escolha a guia do idioma que você deseja 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>

O `$min` operador retorna o valor mínimo de uma matriz de valores. Ele pode ser usado em estágios de agregação para encontrar o valor mínimo para um campo especificado em vários documentos.

**Parâmetros**
+ `expression`: A expressão a ser avaliada. Isso pode ser um caminho de campo, uma variável ou qualquer expressão que se resolva em um valor.

## Exemplo (MongoDB Shell)
<a name="min-examples"></a>

O exemplo a seguir demonstra o uso do `$min` operador para encontrar o valor mínimo do `age` campo em vários documentos.

**Crie documentos de amostra**

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

**Exemplo de consulta**

```
db.users.aggregate([
  { $group: { _id: null, minAge: { $min: "$age" } } },
  { $project: { _id: 0, minAge: 1 } }
])
```

**Saída**

```
[ { minAge: 28 } ]
```

## Exemplos de código
<a name="min-code"></a>

Para ver um exemplo de código para usar o `$min` comando, escolha a guia do idioma que você deseja 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>

O estágio do pipeline `$minute` de agregação no Amazon DocumentDB extrai o valor do minuto de um campo de data ou timestamp.

Esse operador é útil quando você precisa realizar cálculos com base em data e hora ou agrupar em seu pipeline de agregação.

**Parâmetros**
+ `expression`: o campo de data ou carimbo de data/hora do qual extrair o valor do minuto.

## Exemplo (MongoDB Shell)
<a name="minute-examples"></a>

O exemplo a seguir demonstra como usar o `$minute` operador para agrupar os documentos pelo valor do minuto extraído do campo de carimbo de data/hora e contar o número de documentos em cada grupo.

**Crie documentos de amostra**

```
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") }
]);
```

**Exemplo de consulta**

```
db.events.aggregate([
  {
    $group: {
      _id: {
        minute: { $minute: "$timestamp" }
      },
      count: { $count: {} }
    }
  },
  { $sort: { "_id.minute": 1 } }
]);
```

**Saída**

```
[
  { "_id": { "minute": 30 }, "count": 2 },
  { "_id": { "minute": 31 }, "count": 2 },
  { "_id": { "minute": 32 }, "count": 1 }
]
```

## Exemplos de código
<a name="minute-code"></a>

Para ver um exemplo de código para usar o `$minute` comando, escolha a guia do idioma que você deseja 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>

O `$mod` operador é um operador aritmético que executa uma operação de módulo em um número. Ele retorna o restante da divisão de um número por outro. Esse operador é comumente usado para determinar se um número é par ou ímpar, ou para distribuir itens em um número finito de grupos.

**Parâmetros**
+ `expression1`: A expressão do dividendo.
+ `expression2`: A expressão divisora.

## Exemplo (MongoDB Shell)
<a name="mod-examples"></a>

Este exemplo demonstra como usar o `$mod` operador para determinar o número de widgets restantes ao enviar em pacotes de 100.

**Crie documentos de amostra**

```
db.widgets.insertMany([
  { "_id" : 1, "widget" : "A", "count" : 80372 },
  { "_id" : 2, "widget" : "B", "count" : 409282 },
  { "_id" : 3, "widget" : "C", "count" : 60739 }
])
```

**Exemplo de consulta**

```
db.widgets.aggregate([
  { $addFields: { leftOver: { $mod: [ "$count", 100 ] } } }
])
```

**Saída**

```
[
  { "_id" : 1, "widget" : "A", "count" : 80372, "leftOver" : 72 },
  { "_id" : 2, "widget" : "B", "count" : 409282, "leftOver" : 82 },
  { "_id" : 3, "widget" : "C", "count" : 60739, "leftOver" : 39 }
]
```

A saída mostra o restante do `count` dividido por 100 para cada documento, o que representa o número de widgets restantes ao serem enviados em pacotes de 100.

## Exemplos de código
<a name="mod-code"></a>

Para ver um exemplo de código para usar o `$mod` comando, escolha a guia do idioma que você deseja 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>

O `$month` operador no Amazon DocumentDB retorna o mês de uma data como um número entre 1 e 12. Esse operador é útil para extrair o componente mês de um campo de data e realizar agregações e análises baseadas em data.

**Parâmetros**
+ `date_expression`: essa é a expressão ou o campo que contém a data ou o timestamp do qual você deseja extrair o mês.

## Exemplo (MongoDB Shell)
<a name="month-examples"></a>

O exemplo a seguir demonstra como usar o `$month` operador para extrair o mês de um campo de data e agrupar os dados por mês.

**Crie documentos de amostra**

```
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") }
]);
```

**Exemplo de consulta**

```
db.sales.aggregate([
  { $group: { 
      _id: { month: { $month: "$date" } },
      totalSales: { $sum: "$price" }
    }},
  { $sort: { "_id.month": 1 } }
]);
```

**Saída**

```
[
  { _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 }
]
```

## Exemplos de código
<a name="month-code"></a>

Para ver um exemplo de código para usar o `$month` comando, escolha a guia do idioma que você deseja 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>

O `$multiply` operador no Amazon DocumentDB é usado para multiplicar os valores de dois ou mais campos ou expressões. Esse operador é particularmente útil para realizar operações aritméticas em campos numéricos em documentos. Ele pode ser empregado em vários estágios do pipeline de agregação, como `$project` e`$addFields`, para criar novos campos ou modificar os existentes.

**Parâmetros**
+ `expression1`: a primeira expressão numérica a ser multiplicada.
+ `expression2`: a segunda expressão numérica a ser multiplicada.
+ `[expression3, ...]`: (opcional) Expressões numéricas adicionais a serem multiplicadas.

## Exemplo (MongoDB Shell)
<a name="multiply-examples"></a>

O exemplo a seguir demonstra o uso `$multiply` para calcular `bonus_miles` multiplicando `base_miles` e `bonus_rate` para clientes que usaram um cartão de crédito para a viagem.

**Documentos de amostra**

```
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 }
]);
```

**Exemplo 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"]
      }
    }
  }
]);
```

**Saída**

```
[
  { _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 }
]
```

## Exemplos de código
<a name="multiply-code"></a>

Para ver um exemplo de código para usar o `$multiply` comando, escolha a guia do idioma que você deseja 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>

O `$natural` operador no Amazon DocumentDB é usado para classificar os documentos em sua ordem natural, que é a ordem em que foram inseridos na coleção. Isso contrasta com o comportamento de classificação padrão, que consiste em classificar os documentos com base nos valores dos campos especificados.

**Parâmetros**

Nenhum

## Exemplo (MongoDB Shell)
<a name="natural-examples"></a>

O exemplo a seguir demonstra como usar o `$natural` operador para classificar os documentos em uma coleção em sua ordem natural.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.people.find({}, { "_id": 1, "name": 1 }).sort({ "$natural": 1 });
```

**Saída**

```
[
  { "_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" }
]
```

A consulta classifica os documentos na coleção em sua ordem natural, que é a ordem em que foram inseridos.

## Exemplos de código
<a name="natural-code"></a>

Para ver um exemplo de código para usar o `$natural` comando, escolha a guia do idioma que você deseja 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>

O operador `$ne` de agregação compara dois valores e retorna `true` se eles não forem iguais, caso contrário, retorna. `false`

**Parâmetros**
+ `expression1`: o primeiro valor a ser comparado.
+ `expression2`: O segundo valor a ser comparado.

## Exemplo (MongoDB Shell)
<a name="ne-aggregation-examples"></a>

O exemplo a seguir demonstra o uso do `$ne` operador para identificar pedidos com alterações de status.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.orders.aggregate([
  {
    $project: {
      orderId: 1,
      status: 1,
      expectedStatus: 1,
      needsAttention: { $ne: ["$status", "$expectedStatus"] }
    }
  }
]);
```

**Saída**

```
[
  { _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 }
]
```

## Exemplos de código
<a name="ne-aggregation-code"></a>

Para ver um exemplo de código para usar o operador de `$ne` agregação, escolha a guia do idioma que você deseja 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>

O operador `$not` de agregação executa uma operação lógica NOT em uma expressão. Ele retorna `true` se a expressão for avaliada como e `false` se a `false` expressão for avaliada como. `true`

**Parâmetros**
+ `expression`: A expressão a ser negada.

## Exemplo (MongoDB Shell)
<a name="not-aggregation-examples"></a>

O exemplo a seguir demonstra o uso do `$not` operador para inverter valores booleanos.

**Crie documentos de amostra**

```
db.users.insertMany([
  { _id: 1, name: "Alice", active: true },
  { _id: 2, name: "Bob", active: false },
  { _id: 3, name: "Charlie", active: true }
]);
```

**Exemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      active: 1,
      inactive: { $not: ["$active"] }
    }
  }
]);
```

**Saída**

```
[
  { _id: 1, name: 'Alice', active: true, inactive: false },
  { _id: 2, name: 'Bob', active: false, inactive: true },
  { _id: 3, name: 'Charlie', active: true, inactive: false }
]
```

## Exemplos de código
<a name="not-aggregation-code"></a>

Para ver um exemplo de código para usar o operador de `$not` agregação, escolha a guia do idioma que você deseja 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>

O operador `$objectToArray` de agregação no Amazon DocumentDB converte um objeto (ou documento) em uma matriz. A entrada para o operador é um documento e a saída consiste em um elemento de matriz para cada par de valores de campo no documento de entrada. Esse operador é útil quando você precisa trabalhar com os campos individuais de um documento como uma matriz, como quando você deseja encontrar o documento com o valor máximo ou mínimo para um campo específico.

**Parâmetros**
+ `expression`: a expressão do documento a ser convertida em uma matriz.

## Exemplo (MongoDB Shell)
<a name="objectToArray-examples"></a>

O exemplo a seguir demonstra como usar o `$objectToArray` operador para encontrar o documento com o estoque máximo de uma rede de locadoras de vídeo.

**Crie documentos de amostra**

```
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
    }
  }
]);
```

**Exemplo de consulta**

```
db.videos.aggregate([
  {
    $project: {
      name: 1,
      videos: {
        $objectToArray: "$inventory"
      }
    }
  },
  {
    $unwind: "$videos"
  },
  {
    $group: {
      _id: "$name",
      maxInventory: {
        $max: "$videos.v"
      }
    }
  }
]);
```

**Saída**

```
[
  {
    "_id": "Bravemind",
    "maxInventory": 1000
  },
  {
    "_id": "Live Soft",
    "maxInventory": 1000
  },
  {
    "_id": "Romancing the Rock",
    "maxInventory": 500
  },
  {
    "_id": "Top Pilot",
    "maxInventory": 1000
  }
]
```

## Exemplos de código
<a name="objectToArray-code"></a>

Para ver um exemplo de código para usar o `$objectToArray` comando, escolha a guia do idioma que você deseja 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>

O operador `$or` de agregação avalia várias expressões e retorna `true` se pelo menos uma expressão for avaliada como. `true` Ele retornará `false` somente se todas as expressões forem`false`.

**Parâmetros**
+ `expressions`: uma matriz de expressões para avaliar.

## Exemplo (MongoDB Shell)
<a name="or-aggregation-examples"></a>

O exemplo a seguir demonstra o uso do `$or` operador para verificar se os produtos atendem a algum dos vários critérios.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.items.aggregate([
  {
    $project: {
      name: 1,
      price: 1,
      onSale: 1,
      goodDeal: {
        $or: [
          { $lt: ["$price", 50] },
          { $eq: ["$onSale", true] }
        ]
      }
    }
  }
]);
```

**Saída**

```
[
  { _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 }
]
```

## Exemplos de código
<a name="or-aggregation-code"></a>

Para ver um exemplo de código para usar o operador de `$or` agregação, escolha a guia do idioma que você deseja 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>

O `$out` operador no Amazon DocumentDB é usado para gravar o resultado de um pipeline de agregação em uma coleção especificada.

`$out`deve ser a última etapa do pipeline.

**Parâmetros**
+ `output_collection`: o nome da coleção de saída na qual gravar os resultados da agregação.

**Nota**: Se a coleção já existir, ela será substituída pelos resultados do estágio de agregação.

## Exemplo (MongoDB Shell)
<a name="out-examples"></a>

O exemplo a seguir demonstra como usar o `$out` operador no Amazon DocumentDB para gravar os resultados de um pipeline de agregação em uma nova coleção.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.products.aggregate([
  { $group: { _id: "$category", totalPrice: { $sum: "$price" } } },
  { $out: "product_categories" }
])
```

**Saída**

Nenhum (os resultados são gravados na coleção de saída).

O pipeline de agregação agrupa os produtos por categoria e calcula o preço total dos itens para cada categoria. O `$out` operador grava os resultados em uma nova coleção chamada “product\$1categories”.

**Para visualizar os resultados na coleção de saída:**

```
db.product_categories.find()
[
{ "_id" : "Books", "totalPrice" : 125 },
{ "_id" : "Electronics", "totalPrice" : 300 }
]
```

## Exemplos de código
<a name="out-code"></a>

Para ver um exemplo de código para usar o `$out` comando, escolha a guia do idioma que você deseja 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>

Introduzido na versão 8.0

O `$pow` operador no Amazon DocumentDB permite que você eleve um número a uma potência. Isso pode ser útil para realizar cálculos exponenciais em seu pipeline de agregação.

**Parâmetros**
+ `<number>`(obrigatório): O número a ser elevado a uma potência.
+ `<exponent>`(obrigatório): A potência à qual o número deve ser aumentado.

## Exemplo (MongoDB Shell)
<a name="pow-examples"></a>

O exemplo a seguir demonstra como usar o `$pow` operador para calcular o quadrado de um número.

**Crie documentos de amostra**

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

**Exemplo de consulta**

```
db.numbers.aggregate([
  { $addFields: { "square": { $pow: ["$value", 2] } } }
])
```

**Saída**

```
[
  { "_id": 1, "value": 2, "square": 4 },
  { "_id": 2, "value": 3, "square": 9 },
  { "_id": 3, "value": 4, "square": 16 }
]
```

## Exemplos de código
<a name="pow-code"></a>

Para ver um exemplo de código para usar o `$pow` comando, escolha a guia do idioma que você deseja usar:

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

Aqui está um exemplo de uso do operador \$1pow em um aplicativo 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 ]

Aqui está um exemplo do uso do operador \$1pow em um aplicativo 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>

O operador `$push` de agregação retorna uma matriz de todos os valores de uma expressão especificada para cada grupo. Normalmente é usado no `$group` estágio para acumular valores em uma matriz.

**Parâmetros**
+ `expression`: a expressão a ser avaliada para cada documento no grupo.

## Exemplo (MongoDB Shell)
<a name="push-aggregation-examples"></a>

O exemplo a seguir demonstra o uso do `$push` operador para coletar todos os nomes de produtos para cada categoria.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.sales.aggregate([
  {
    $group: {
      _id: "$category",
      products: { $push: "$product" }
    }
  }
]);
```

**Saída**

```
[
  { _id: 'Furniture', products: [ 'Desk', 'Chair' ] },
  { _id: 'Electronics', products: [ 'Laptop', 'Mouse', 'Keyboard' ] }
]
```

## Exemplos de código
<a name="push-aggregation-code"></a>

Para ver um exemplo de código para usar o operador de `$push` agregação, escolha a guia do idioma que você deseja 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>

O `$project` operador no Amazon DocumentDB permite que você inclua ou exclua seletivamente campos dos documentos de saída, passe valores para a próxima etapa do pipeline e calcule novos campos a partir dos valores do documento de entrada.

**Parâmetros**
+ `field`: o campo a ser incluído ou excluído dos documentos de saída, pode ser um caminho de campo (por exemplo, “a.b.c”).
+ `1`ou`true`: Inclui o campo na saída.
+ `0`ou`false`: Exclui o campo da saída.

## Exemplo (MongoDB Shell)
<a name="project-examples"></a>

O exemplo a seguir demonstra o uso do `$project` operador na coleção de estudantes

**Crie documentos de amostra**

```
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" }
  ]);
```

Essa consulta inclui somente os `math` campos `name` e na saída. O `_id` campo é incluído por padrão, a menos que seja explicitamente excluído.

```
db.students.aggregate([
  { $project: { "name": 1, "math": 1 } }
])
```

**Saída**

```
{ _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 }
```

Essa consulta exclui os `_id` campos `grade` e da saída, mostrando todos os outros campos (`name`,`math`,`science`).

```
db.students.aggregate([
  { $project: { "grade": 0, "_id": 0 } }
])
```

**Saída**

```
{ 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 }
```

## Exemplos de código
<a name="project-code"></a>

Para ver um exemplo de código para usar o `$project` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 8.0

O `$rand` operador no Amazon DocumentDB é usado para gerar um número aleatório entre 0 e 1.

**Parâmetros**

Nenhum

## Exemplo (MongoDB Shell)
<a name="rand-examples"></a>

O exemplo a seguir demonstra como usar o `$rand` operador para selecionar aleatoriamente dois documentos da `temp` coleção.

**Crie documentos de amostra**

```
db.items.insertMany([
  { "name": "pencil", "quantity": 110 },
  { "name": "pen", "quantity": 159 }
])
```

**Exemplo de consulta**

```
db.items.aggregate([
  {
    $project: {
      randomValue: { $rand: {} }
    }
  }
])
```

**Saída**

```
[
  {
    _id: ObjectId('6924a5edd66dcae121d29517'),
    randomValue: 0.8615243955294392
  },
  {
    _id: ObjectId('6924a5edd66dcae121d29518'),
    randomValue: 0.22815483022099903
  }
]
```

## Exemplos de código
<a name="rand-code"></a>

Para ver um exemplo de código para usar o `$rand` comando, escolha a guia do idioma que você deseja 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>

O operador `$range` de agregação no Amazon DocumentDB é usado para criar uma matriz de números consecutivos dentro de um intervalo especificado. Esse operador é particularmente útil para gerar sequências de números, como marcadores de milhas para postos de socorro em uma corrida, conforme demonstrado nos exemplos abaixo.

**Parâmetros**
+ `start`: O valor inicial do intervalo.
+ `end`: O valor final do intervalo.
+ `step`: (opcional) O valor da etapa a ser usado ao gerar o intervalo. Se não for fornecido, o valor padrão da etapa será 1.

## Exemplo (MongoDB Shell)
<a name="range-examples"></a>

Neste exemplo, usaremos o `$range` operador para gerar os marcadores de milhas para estações de água em uma corrida de bicicleta.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.races.aggregate([
  {
    $project: {
      race: 1,
      "waterStations": { $range: [20, "$distance", 20] }
    }
  }
]);
```

**Saída**

```
[
  {
    _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 ] }
]
```

## Exemplos de código
<a name="range-code"></a>

Para ver um exemplo de código para usar o `$range` comando, escolha a guia do idioma que você deseja 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>

O estágio `$redact` de agregação no Amazon DocumentDB é usado para incluir ou excluir seletivamente conteúdo dos documentos de saída com base nos valores dos campos especificados. Isso é particularmente útil em cenários em que você precisa controlar a visibilidade de dados confidenciais com base nos níveis de acesso ou nas permissões do usuário.

**Parâmetros**
+ `$cond`: uma expressão que é avaliada como `$$KEEP``$$PRUNE`, ou `$$DESCEND` para cada campo no documento.
+ `$$KEEP`: mantém o campo atual no documento de saída.
+ `$$PRUNE`: remove o campo atual do documento de saída.
+ `$$DESCEND`: aplica recursivamente o `$redact` estágio ao campo atual, que é um objeto ou matriz.

## Exemplo (MongoDB Shell)
<a name="redact-examples"></a>

Neste exemplo, usaremos o `$redact` estágio para filtrar pedidos com base em seu status, mostrando somente pedidos com valores de status específicos.

**Crie documentos de amostra**

```
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" }
])
```

**Exemplo de consulta**

```
db.orders.aggregate([
  {
    $redact: {
      $cond: {
        if: { $in: ["$status", ["shipped", "processing"]] },
        then: "$$KEEP",
        else: "$$PRUNE"
      }
    }
  }
])
```

**Saída**

```
[
  { _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' }
]
```

Neste exemplo, o `$redact` estágio verifica o valor do `status` campo em cada documento. Se `status` for “enviado” ou “processado”, o documento será mantido (`$$KEEP`). Caso contrário, o documento será removido (`$$PRUNE`).

## Exemplos de código
<a name="redact-code"></a>

Para ver um exemplo de código para usar o `$redact` comando, escolha a guia do idioma que você deseja 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>

O operador `$reduce` de agregação no Amazon DocumentDB é usado para aplicar uma função de dois argumentos cumulativamente aos elementos de uma matriz para reduzir a matriz a um único valor. Esse operador é particularmente útil para realizar cálculos ou transformações complexas em dados de matriz dentro do pipeline de agregação.

**Parâmetros**
+ `input`: A matriz a ser reduzida.
+ `initialValue`: O valor inicial a ser usado na operação de redução.
+ `in`: a expressão a ser avaliada em cada elemento da `input` matriz. Essa expressão deve retornar um valor que será usado na próxima iteração da redução.

## Exemplo (MongoDB Shell)
<a name="reduce-examples"></a>

O exemplo a seguir demonstra como usar o `$reduce` operador para calcular a soma de todos os elementos em uma matriz.

**Crie documentos de amostra**

```
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] }
])
```

**Exemplo de consulta**

```
db.orders.aggregate([
  {
    $project: {
      total: {
        $reduce: {
          input: "$items",
          initialValue: 0,
          in: { $add: ["$$value", "$$this"] }
        }
      }
    }
  }
])
```

**Saída**

```
[
  { "_id": 1, "total": 15 },
  { "_id": 2, "total": 60 },
  { "_id": 3, "total": 80 },
  { "_id": 4, "total": 300 }
]
```

O `$reduce` operador itera sobre a `items` matriz, adicionando cada elemento ao `initialValue` de 0. O resultado é a soma de todos os elementos na matriz.

## Exemplos de código
<a name="reduce-code"></a>

Para ver um exemplo de código para usar o `$reduce` comando, escolha a guia do idioma que você deseja usar:

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

Aqui está um exemplo de uso do `$reduce` operador em um aplicativo 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 ]

Aqui está um exemplo de uso do `$reduce` operador em um aplicativo 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>

Novo a partir da versão 5.0.

Não é compatível com o cluster elástico.

O `$regexFind` operador no Amazon DocumentDB é usado para realizar a correspondência de expressões regulares em campos de string em documentos. Ele permite pesquisar e extrair substrings específicas que correspondam a um determinado padrão de expressão regular.

**Parâmetros**
+ `input`: O campo de string ou expressão a ser pesquisado.
+ `regex`: O padrão de expressão regular a ser correspondente.
+ `options`: (opcional) Um objeto que especifica parâmetros opcionais para a expressão regular, como distinção entre maiúsculas e minúsculas e correspondência de várias linhas. As opções suportadas são `i` (sem distinção entre maiúsculas e minúsculas) e `m` (várias linhas).

## Exemplo (MongoDB Shell)
<a name="regexFind-examples"></a>

O exemplo a seguir demonstra como usar o `$regexFind` operador para pesquisar documentos em que o `name` campo corresponda a um padrão específico de expressão regular.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      names: {
        $regexFind: { input: '$name', regex: 'j', options: 'i' }
      }
    }
  },
  { $match: {names: {$ne: null}}}
])
```

Essa consulta retornará todos os documentos em que o `name` campo contém a letra “j” (sem distinção entre maiúsculas e minúsculas).

**Saída**

```
[
  { _id: 1, names: { match: 'J', idx: 0, captures: [] } }
]
```

**Nota:** Se sua consulta estiver usando o planejador Amazon DocumentDB versão 1, você deve usar uma dica para utilizar um índice. Sem uma dica, a consulta pode realizar uma varredura de coleção. Para verificar sua versão do planejador e saber mais sobre o uso de dicas, consulte a [documentação do Amazon DocumentDB Query Planner] (-planner.html). https://docs.aws.amazon.com/documentdb/ latest/developerguide/query

## Exemplos de código
<a name="regexFind-code"></a>

Para ver um exemplo de código para usar o `$regexFind` comando, escolha a guia do idioma que você deseja 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>

Introduzido na versão 5.0

O `$regexFindAll` operador no Amazon DocumentDB é usado para realizar a correspondência de expressões regulares em campos de string em documentos. Ele permite pesquisar e extrair substrings específicas que correspondam a um determinado padrão de expressão regular, retornando todas as correspondências da expressão regular.

**Parâmetros**
+ `input`: O campo de string ou expressão a ser pesquisado.
+ `regex`: O padrão de expressão regular a ser correspondente.
+ `options`: (opcional) Um objeto que especifica parâmetros opcionais para a expressão regular, como distinção entre maiúsculas e minúsculas e correspondência de várias linhas. As opções suportadas são `i` (sem distinção entre maiúsculas e minúsculas) e `m` (várias linhas).

## Exemplo (MongoDB Shell)
<a name="regexFindAll-examples"></a>

O exemplo a seguir demonstra como usar o `$regexFindAll` operador para extrair todas as sequências de letras do `email` campo.

**Crie documentos de amostra**

```
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" }
  
]);
```

**Exemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      emailMatches: {
        $regexFindAll: { input: '$email', regex: '[a-z]+', options: 'i' }
      }
    }
  }
])
```

**Saída**

```
[
  {
    _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:** Se sua consulta estiver usando o planejador Amazon DocumentDB versão 1, você deve usar uma dica para utilizar um índice. Sem uma dica, a consulta pode realizar uma varredura de coleção. Para verificar sua versão do planejador e saber mais sobre o uso de dicas, consulte a [documentação do Amazon DocumentDB Query Planner] (-planner.html). https://docs.aws.amazon.com/documentdb/ latest/developerguide/query

## Exemplos de código
<a name="regexFindAll-code"></a>

Para ver um exemplo de código para usar o `$regexFindAll` comando, escolha a guia do idioma que você deseja usar:

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

Aqui está um exemplo de uso do `$regexFind` operador em um aplicativo 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 ]

Aqui está um exemplo de uso do `$regexFind` operador em um aplicativo 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()
```

------

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

Novo a partir da versão 5.0. Não é compatível com o cluster elástico.

O `$regexMatch` operador no Amazon DocumentDB é usado para realizar a correspondência de expressões regulares em campos de string. Ele retorna um valor booleano (`true`ou`false`) indicando se a string de entrada corresponde ao padrão especificado.

**Parâmetros**
+ `input`: a string a ser testada em relação à expressão regular.
+ `regex`: O padrão de expressão regular a ser correspondente.
+ `options`: (Opcional) Sinalizadores para modificar o comportamento da expressão regular, como correspondência sem distinção entre maiúsculas e minúsculas (`i`) ou correspondência de várias linhas (). `m`

## Exemplo (MongoDB Shell)
<a name="regexMatch-examples"></a>

O exemplo a seguir demonstra como usar o `$regexMatch` operador para verificar se os nomes começam com a letra 'M'. O operador retorna `true` ou `false` para cada documento.

**Crie documentos de amostra**

```
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" },

]);
```

**Exemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      startsWithM: {
        $regexMatch: {
          input: "$name",
          regex: "^M",
          options: "i"
        }
      }
    }
  }
]);
```

**Saída**

```
{ _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 }
```

## Exemplos de código
<a name="regexMatch-code"></a>

Para ver um exemplo de código para usar o `$regexMatch` comando, escolha a guia do idioma que você deseja 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>

Introduzido na versão 5.0

O `$replaceAll` operador no Amazon DocumentDB é usado para substituir todas as ocorrências de um padrão de sequência de caracteres especificado em um campo por uma nova cadeia de caracteres. Esse operador pode ser útil para tarefas como normalização de dados, limpeza de texto e manipulação de cadeias de caracteres.

**Parâmetros**
+ `input`: o campo ou a expressão que contém a string a ser substituída.
+ `find`: O padrão de string a ser pesquisado e substituído.
+ `replacement`: a string pela qual substituir as ocorrências correspondentes.

## Exemplo (MongoDB Shell)
<a name="replaceAll-examples"></a>

O exemplo a seguir demonstra como usar o `$replaceAll` operador em um pipeline de agregação para substituir todas as ocorrências da string “Chocolatier” por “Chocolate Co.” no campo “BrandName” de uma coleção de “produtos”.

**Crie documentos de amostra**

```
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
  }
]);
```

**Exemplo de consulta**

```
db.products.aggregate([
  {
    $addFields: {
      "brandName": {
        $replaceAll: {
          input: "$brandName",
          find: "Chocolatier",
          replacement: "Chocolate Co."
        }
      }
    }
  }
])
```

**Saída**

```
[
  {
    _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
  }
]
```

## Exemplos de código
<a name="replaceAll-code"></a>

Para ver um exemplo de código para usar o `$replaceAll` comando, escolha a guia do idioma que você deseja 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()
```

------

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

Introduzido na versão 5.0

O `$replaceOne` operador no Amazon DocumentDB é um operador de expressão de string usado em pipelines de agregação para substituir a primeira ocorrência de uma substring especificada em uma string por uma string de substituição. Esse operador diferencia maiúsculas de minúsculas e substitui somente a primeira correspondência encontrada.

**Parâmetros**
+ `input`: A string (campo) na qual realizar a busca.
+ `find`: a string a ser pesquisada na entrada.
+ `replacement`: a string para substituir a primeira ocorrência da descoberta na entrada (campo).

## Exemplo (MongoDB Shell)
<a name="replaceOne-examples"></a>

O exemplo a seguir demonstra como usar o `$replaceOne` operador em um pipeline de agregação para substituir substrings em nomes de produtos.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de agregação**

```
db.products.aggregate([
  {
    $addFields: {
      standardizedName: {
        $replaceOne: {
          input: "$name",
          find: "Pack",
          replacement: "Package"
        }
      }
    }
  }
]);
```

**Saída**

A saída mostra que somente a primeira ocorrência de “Pack” em cada nome de produto foi substituída 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"
  }
```

## Exemplos de código
<a name="replaceOne-code"></a>

Para ver um exemplo de código para usar o `$replaceOne` comando, escolha a guia do idioma que você deseja 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>

O `$replaceRoot` operador é usado para substituir o documento raiz pelo documento incorporado especificado. Isso é útil quando você deseja promover um documento aninhado ao nível superior ou reestruturar sua saída de dados.

**Parâmetros**
+ `newRoot`: o novo documento raiz que substituirá o documento raiz existente.

## Exemplo (MongoDB Shell)
<a name="replaceRoot-examples"></a>

Este exemplo mostra como extrair informações de endereço de entrega de pedidos de clientes, o que é útil para gerar etiquetas de frete ou listas de endereços.

**Crie documentos de amostra**

```
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 } ])
```

**Exemplo de consulta**

```
db.orders.aggregate([
  {
    $replaceRoot: {
      newRoot: "$shippingAddress"
    }
  }
])
```

**Saída**

```
{
    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'
  }
```

## Exemplos de código
<a name="replaceRoot-code"></a>

Para ver um exemplo de código para usar o `$replaceRoot` comando, escolha a guia do idioma que você deseja 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 substituir por
<a name="replaceWith"></a>

Novo a partir da versão 8.0

Não é compatível com o cluster elástico.

O estágio `$replaceWith` de agregação no Amazon DocumentDB é usado para substituir o documento de entrada por um novo documento. Todos os campos existentes no documento de entrada, incluindo o campo \$1id, são substituídos pelo novo documento. `$replaceWith`é comumente usado para nivelar documentos ou promover um documento incorporado ao nível superior.

**Parâmetros**
+ `<replacement>`(obrigatório): o novo documento que substituirá o documento existente.

## Exemplo (MongoDB Shell)
<a name="replaceWith-examples"></a>

O exemplo a seguir demonstra como usar o `$replaceWith` operador para substituir um documento existente em uma coleção do Amazon DocumentDB.

**Crie documentos de amostra**

```
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 ]
  }
]);
```

**Exemplo de consulta**

```
db.restaurants.aggregate([
  { $replaceWith: {
      name: "$name",
      cuisine: "$cuisine",
      rating: { $avg: "$ratings" }
    }
  }
]);
```

**Saída**

```
[
  {
    name: 'Biryani Adda',
    cuisine: 'Indian',
    rating: 3.4
  },
  {
    name: 'The Burger Spot',
    cuisine: 'American',
    rating: 2.7777777777777777
  }
]
```

## Exemplos de código
<a name="replaceWith-code"></a>

Para ver um exemplo de código para usar o `$replaceWith` comando, escolha a guia do idioma que você deseja 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>

O `$reverseArray` operador no Amazon DocumentDB é usado para reverter os elementos de uma matriz na ordem especificada. Esse operador é útil quando você precisa reordenar os elementos de uma matriz na direção inversa.

**Parâmetros**
+ `expression`: A expressão de matriz a ser revertida.

## Exemplo (MongoDB Shell)
<a name="reverseArray-examples"></a>

O exemplo a seguir demonstra como usar o `$reverseArray` operador para reverter a ordem dos elementos em uma matriz.

**Crie documentos de amostra**

```
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]}
]);
```

**Exemplo de consulta**

```
db.miles.aggregate([
  {
    $project: {
      _id: 1,
      member_since: 1,
      credit_card: 1,
      reversed_flight_miles: { $reverseArray: "$flight_miles" }
    }
  }
]);
```

**Saída**

```
{ "_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 ] }
```

Neste exemplo, o `$reverseArray` operador é usado para reverter a ordem da `flight_miles` matriz. O `reversed_flight_miles` campo resultante na saída mostra os elementos da matriz na ordem inversa.

## Exemplos de código
<a name="reverseArray-code"></a>

Para ver um exemplo de código para usar o `$reverseArray` comando, escolha a guia do idioma que você deseja usar:

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

Aqui está um exemplo de uso do `$reverseArray` operador em um aplicativo 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 ]

Aqui está um exemplo de uso do `$reverseArray` operador em um aplicativo 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>

Novo a partir da versão 4.0.

Não é compatível com o cluster elástico.

O `$rtrim` operador no Amazon DocumentDB é usado para remover caracteres finais de uma string. Por padrão, ele remove os caracteres de espaço em branco à direita, mas você também pode especificar um conjunto de caracteres a serem removidos passando o argumento chars.

**Parâmetros**
+ `input`: a string de entrada da qual remover os caracteres de espaço em branco à direita.
+ `chars`: (opcional) Para remover caracteres específicos.

## Exemplo (MongoDB Shell)
<a name="rtrim-examples"></a>

O exemplo a seguir demonstra como usar o `$rtrim` operador para remover caracteres especificados à direita (” \$1”) de uma string.

**Crie documentos de amostra**

```
db.collection.insert([
  { "name": "John Doe*  ", "age": 30 },
  { "name": "Jane Smith  ", "age": 25 },
  { "name": "Bob Johnson", "age": 35 }
]);
```

**Exemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      _id: 0,
      name: { $rtrim: { input: "$name", chars: " *" } }, 
      age: 1
    }
  }
]);
```

**Saída**

```
[
  { age: 30, name: 'John Doe' },
  { age: 25, name: 'Jane Smith' },
  { age: 35, name: 'Bob Johnson' }
]
```

## Exemplos de código
<a name="rtrim-code"></a>

Para ver um exemplo de código para usar o `$rtrim` comando, escolha a guia do idioma que você deseja 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>

O estágio `$sample` de agregação no Amazon DocumentDB é usado para selecionar aleatoriamente um número específico de documentos de uma coleção. Isso é útil para tarefas como análise de dados, testes e geração de amostras para processamento posterior.

**Parâmetros**
+ `size`: o número de documentos a serem selecionados aleatoriamente.

## Exemplo (MongoDB Shell)
<a name="sample-examples"></a>

O exemplo a seguir demonstra como usar o `$sample` palco para selecionar aleatoriamente dois documentos da `temp` coleção.

**Crie documentos de amostra**

```
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") }
]);
```

**Exemplo de consulta**

```
db.temp.aggregate([
   { $sample: { size: 2 } }
])
```

**Saída**

```
{ "_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 mostram os resultados, 2 dos 10 documentos foram amostrados aleatoriamente. Agora você pode usar esses documentos para determinar uma média ou realizar min/max cálculos.

## Exemplos de código
<a name="sample-code"></a>

Para ver um exemplo de código para usar o `$sample` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 5.0.

O `$search` operador no Amazon DocumentDB é usado para fornecer recursos de pesquisa de texto.

**Parâmetros**

Nenhum

## Exemplo (MongoDB Shell)
<a name="search-examples"></a>

O exemplo a seguir demonstra como usar o `$search` operador para realizar uma consulta de pesquisa de texto.

**Crie documentos de amostra**

```
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." }
]);
```

**Exemplo de consulta**

```
db.textcollection.find(
  { $text: { $search: "John" } }
);
```

**Saída**

```
[
  {
    _id: 1,
    name: 'John Doe',
    description: 'This is a sample document about John Doe.'
  }
]
```

## Exemplos de código
<a name="search-code"></a>

Para ver um exemplo de código para usar o `$search` comando, escolha a guia do idioma que você deseja 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>

O `$second` operador no Amazon DocumentDB extrai o componente de segundos de uma data ou timestamp. Ele é usado para recuperar o valor dos segundos de um campo de data ou carimbo de data/hora.

**Parâmetros**
+ `expression`: o campo de data ou carimbo de data/hora do qual extrair o valor dos segundos. Essa expressão pode ser um caminho de campo ou qualquer expressão válida que se resolva em uma data ou carimbo de data/hora.

## Exemplo (MongoDB Shell)
<a name="second-examples"></a>

O exemplo a seguir demonstra como usar o `$second` operador para extrair o componente de segundos de um campo de data.

**Crie documentos de amostra**

```
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") }
]);
```

**Exemplo de consulta**

```
db.users.aggregate([{ $project: { name: 1, dobSeconds: { $second: "$dob" } } }])
```

**Saída**

```
[
  { "_id" : ObjectId("6089a9c306a829d1f8b456a1"), "name" : "John", "dobSeconds" : 45 },
  { "_id" : ObjectId("6089a9c306a829d1f8b456a2"), "name" : "Jane", "dobSeconds" : 59 },
  { "_id" : ObjectId("6089a9c306a829d1f8b456a3"), "name" : "Bob", "dobSeconds" : 0 }
]
```

## Exemplos de código
<a name="second-code"></a>

Para ver um exemplo de código para usar o `$second` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 8.0

Não é compatível com o cluster elástico.

O estágio `$set` de agregação no Amazon DocumentDB permite que você adicione novos campos ou atualize valores de campo existentes na documentação durante um pipeline de agregação.

**Parâmetros**
+ `expression`: A expressão a ser avaliada. Isso pode ser qualquer expressão de agregação válida, incluindo referências de campo e operações aritméticas.

## Exemplo (MongoDB Shell)
<a name="set-stage-examples"></a>

O exemplo a seguir demonstra o uso do estágio de `$set` agregação para calcular totais multiplicando o `quantity` campo pelo campo. `price`

**Crie documentos de amostra**

```
db.inventory.insertMany([
  { item: "pencil", quantity: 100, price: 0.24},
  { item: "pen", quantity: 204, price: 1.78 }
]);
```

**Exemplo de agregação**

```
db.inventory.aggregate([
  {
    $set: {
      total: { $multiply: ["$quantity", "$price"] }
    }
  }
])
```

**Saída**

```
[
  {
    _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
  }
]
```

## Exemplos de código
<a name="set-stage-code"></a>

Para ver um exemplo de código para usar o `$set` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0.

O `$setDifference` operador no Amazon DocumentDB é usado para comparar dois conjuntos e retornar os elementos que estão no primeiro conjunto, mas não no segundo. Esse operador é útil para encontrar os elementos exclusivos entre dois conjuntos.

**Parâmetros**
+ `firstSet`: O primeiro conjunto a ser comparado.
+ `secondSet`: O segundo conjunto para comparar.

## Exemplo (MongoDB Shell)
<a name="setDifference-examples"></a>

O exemplo a seguir demonstra como usar o `$setDifference` operador para encontrar os elementos exclusivos entre dois conjuntos.

**Crie documentos de amostra**

```
db.collection.insertMany([
  { _id: 1, fruits: ["apple", "banana", "cherry", "date"] },
  { _id: 2, fruits: ["banana", "cherry", "date", "elderberry"] }
]);
```

**Exemplo de consulta**

```
db.collection.aggregate([
  {
    $project: {
      uniqueFruits: { $setDifference: ["$fruits", ["banana", "cherry", "date"]] }
    }
  }
]);
```

**Saída**

```
[
  { "_id": 1, "uniqueFruits": ["apple"] },
  { "_id": 2, "uniqueFruits": ["elderberry"] }
]
```

A consulta executa as seguintes etapas:

1. Ele usa o `$project` palco para criar um novo campo `uniqueFruits` para cada documento.

2. O `$setDifference` operador compara a `fruits` matriz com a matriz `[&quot;banana&quot;, &quot;cherry&quot;, &quot;date&quot;]` e retorna os elementos exclusivos na `fruits` matriz.

## Exemplos de código
<a name="setDifference-code"></a>

Para ver um exemplo de código para usar o `$setDifference` comando, escolha a guia do idioma que você deseja usar:

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

Veja um exemplo de como usar o `$setDifference` operador em um aplicativo 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 ]

Aqui está um exemplo de como usar o `$setDifference` operador em um aplicativo 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>

O `$setEquals` operador no Amazon DocumentDB é usado para determinar se dois conjuntos são iguais. Ele compara duas matrizes e retorna `true` se elas contêm os mesmos elementos distintos, independentemente da ordem.

**Parâmetros**
+ `expression1`: a primeira matriz a ser comparada.
+ `expression2`: a segunda matriz a ser comparada.

## Exemplo (MongoDB Shell)
<a name="setEquals-examples"></a>

O exemplo a seguir demonstra o uso do `$setEquals` operador para comparar dois conjuntos de valores.

**Crie documentos de amostra**

```
db.collection.insertMany([
  { _id: 1, fruits: ["apple", "banana", "cherry"] },
  { _id: 2, fruits: ["banana", "apple", "cherry"] },
  { _id: 3, fruits: ["apple", "banana", "orange"] }
])
```

**Exemplo de consulta**

```
db.collection.find({
  $expr: {
    $setEquals: ["$fruits", ["apple", "banana", "cherry"]]
  }
})
```

**Saída**

```
{ "_id" : 1, "fruits" : [ "apple", "banana", "cherry" ] }
{ "_id" : 2, "fruits" : [ "banana", "apple", "cherry" ] }
```

A consulta usa o `$setEquals` operador para comparar o `fruits` campo de cada documento com a matriz`[&quot;apple&quot;, &quot;banana&quot;, &quot;cherry&quot;]`. Os documentos em que o `fruits` campo é igual à matriz de comparação são retornados.

## Exemplos de código
<a name="setEquals-code"></a>

Para ver um exemplo de código para usar o `$setEquals` comando, escolha a guia do idioma que você deseja 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>

O `$setIntersection` operador no Amazon DocumentDB é usado para retornar os elementos comuns entre duas ou mais matrizes. Esse operador é particularmente útil ao trabalhar com conjuntos de dados, permitindo que você encontre a interseção de vários conjuntos.

**Parâmetros**
+ `array1`: a primeira matriz a se cruzar.
+ `array2`: a segunda matriz a ser cruzada.
+ `arrayN`: (opcional) Matrizes adicionais a serem cruzadas.

## Exemplo (MongoDB Shell)
<a name="setIntersection-examples"></a>

O exemplo a seguir demonstra como usar o `$setIntersection` operador para encontrar os elementos comuns entre duas matrizes.

**Crie documentos de amostra**

```
db.collection.insertMany([
  { _id: 1, colors: ["red", "blue", "green"] },
  { _id: 2, colors: ["blue", "yellow", "orange"] },
  { _id: 3, colors: ["red", "green", "purple"] }
])
```

**Exemplo de consulta**

```
db.collection.aggregate([
  { $project: {
      _id: 1,
      commonColors: { $setIntersection: ["$colors", ["red", "blue", "green"]] }
    }
  }
])
```

**Saída**

```
[
  { "_id": 1, "commonColors": ["red", "blue", "green"] },
  { "_id": 2, "commonColors": ["blue"] },
  { "_id": 3, "commonColors": ["red", "green"] }
]
```

## Exemplos de código
<a name="setIntersection-code"></a>

Para ver um exemplo de código para usar o `$setIntersection` comando, escolha a guia do idioma que você deseja 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>

O `$setIsSubset` operador no Amazon DocumentDB é usado para determinar se um conjunto de valores é um subconjunto de outro conjunto. É útil para realizar comparações e operações baseadas em conjuntos em campos de matriz.

**Parâmetros**
+ `field`: o campo ao qual aplicar o `$setIsSubset` operador.
+ `set`: O conjunto com o qual comparar o campo.

## Exemplo (MongoDB Shell)
<a name="setIsSubset-examples"></a>

O exemplo a seguir demonstra o uso do `$setIsSubset` operador para verificar se o `tags` campo é um subconjunto do conjunto especificado.

**Crie documentos de amostra**

```
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"] }
]);
```

**Exemplo de consulta**

```
db.products.find({
  $expr: { $setIsSubset: [["tag1", "tag2"], "$tags"] }
})
```

\$1Nota: \$1 `$setIsSubset` é um operador de agregação e não pode ser usado diretamente nas consultas find (). Neste exemplo, `$expr` é usado com `find()` para preencher a lacuna entre operadores de consulta e expressões de agregação.

**Saída**

```
[
  { "_id" : 1, "name" : "Product A", "tags" : [ "tag1", "tag2", "tag3" ] },
  { "_id" : 2, "name" : "Product B", "tags" : [ "tag1", "tag2" ] }
]
```

A consulta retorna os documentos em que o `tags` campo é um subconjunto do conjunto`[&quot;tag1&quot;, &quot;tag2&quot;]`.

## Exemplos de código
<a name="setIsSubset-code"></a>

Para ver um exemplo de código para usar o `$setIsSubset` comando, escolha a guia do idioma que você deseja 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>

O operador `$setUnion` de agregação no Amazon DocumentDB é usado para combinar dois ou mais conjuntos de valores e retornar um conjunto que contém todos os elementos exclusivos dos conjuntos de entrada. Esse operador é útil quando você precisa realizar operações baseadas em conjuntos em campos de matriz em seus documentos.

**Parâmetros**
+ `expression1`: uma expressão que se resolve em uma matriz.
+ `expression2`: uma expressão que se resolve em uma matriz.
+ `expressionN`: expressões adicionais que se resolvem em matrizes (opcional).

## Exemplo (MongoDB Shell)
<a name="setUnion-examples"></a>

O exemplo a seguir demonstra como usar o `$setUnion` operador para combinar os elementos exclusivos de dois campos de matriz em uma coleção.

**Crie documentos de amostra**

```
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"] }
]);
```

**Exemplo de consulta**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      allInterests: { $setUnion: ["$hobbies", "$skills"] }
    }
  }
]);
```

**Saída**

```
[
  { "_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" ] }
]
```

Neste exemplo, o `$setUnion` operador é usado para combinar os elementos exclusivos dos campos `hobbies` e da `skills` matriz para cada documento do usuário. O `allInterests` campo resultante contém a união de todos os hobbies e habilidades exclusivos de cada usuário.

## Exemplos de código
<a name="setUnion-code"></a>

Para ver um exemplo de código para usar o `$setUnion` comando, escolha a guia do idioma que você deseja 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>

No Amazon DocumentDB, o `$skip` operador é usado para compensar o ponto de partida dos resultados da consulta, permitindo que você recupere um subconjunto específico dos documentos correspondentes. Isso é particularmente útil em cenários de paginação, nos quais você deseja recuperar páginas subsequentes de resultados.

**Parâmetros**
+ `skip`: o número de documentos a serem ignorados antes de devolver os documentos restantes.

## Exemplo (MongoDB Shell)
<a name="skip-examples"></a>

O exemplo a seguir demonstra como usar o `$skip` operador para recuperar a segunda página de resultados (documentos 11-20) de uma coleção.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.collection.find({}, { "name": 1 })
             .skip(10)
             .limit(10);
```

**Saída**

```
[
  { "_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" }
]
```

## Exemplos de código
<a name="skip-code"></a>

Para ver um exemplo de código para usar o `$skip` comando, escolha a guia do idioma que você deseja 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>

O operador `$slice` de agregação permite que você retorne um subconjunto de uma matriz percorrendo a matriz do início ou do final da matriz. Isso é usado para exibir um número limitado de itens de um campo de matriz, como os N itens superiores ou inferiores.

**Parâmetros**
+ `array`: O campo da matriz a ser fatiado.
+ `n`: um número inteiro que especifica o número de elementos a serem retornados. Um valor positivo começa no início da matriz, enquanto um valor negativo começa no final da matriz.

## Exemplo (MongoDB Shell)
<a name="slice-examples"></a>

O exemplo a seguir demonstra como usar `$slice` para devolver os dois primeiros doces favoritos de cada chef.

**Crie documentos de amostra**

```
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" ] }
]);
```

**Exemplo de consulta**

```
db.sweets.aggregate([
  { $project: { _id: 0, name: 1, topTwoFavorites: { $slice: [ "$favorites", 2 ] } } }
]);
```

**Saída**

```
[
  { name: 'Alvin', topTwoFavorites: [ 'chocolate', 'cake' ] },
  { name: 'Tom', topTwoFavorites: [ 'donuts', 'pudding' ] },
  { name: 'Jessica', topTwoFavorites: [ 'fudge', 'smores' ] },
  { name: 'Rachel', topTwoFavorites: [ 'ice cream' ] }
]
```

Neste exemplo, o `$slice` operador é usado para extrair os dois primeiros elementos da `favorites` matriz para cada documento.

## Exemplos de código
<a name="slice-code"></a>

Para ver um exemplo de código para usar o `$slice` comando, escolha a guia do idioma que você deseja 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>

O `$size` operador é usado para retornar a contagem de itens em um campo de matriz. Isso pode ser usado para determinar o número de elementos em uma matriz armazenada em um documento.

**Parâmetros**
+ `field`: o caminho do campo cujo tamanho de matriz você deseja retornar.

## Exemplo (MongoDB Shell)
<a name="size-examples"></a>

Este exemplo mostra como usar o `$size` operador para retornar a contagem de equipes que cada usuário está seguindo.

**Crie documentos de amostra**

```
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"] }
]);
```

**Exemplo de consulta**

```
db.profiles.aggregate([
  {
    $project: {
      _id: 0,
      name: 1,
      "numberOfTeams": { $size: "$teams" }
    }
  }
])
```

**Saída**

```
[
  { name: 'John Doe', numberOfTeams: 3 },
  { name: 'Jane Smith', numberOfTeams: 2 },
  { name: 'Bob Johnson', numberOfTeams: 3 }
]
```

## Exemplos de código
<a name="size-code"></a>

Para ver um exemplo de código para usar o `$size` comando, escolha a guia do idioma que você deseja 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>

O estágio `$sort` de agregação ordena os documentos no pipeline com base nos valores de campo especificados. Os documentos são organizados em ordem crescente ou decrescente de acordo com os critérios de classificação fornecidos.

**Parâmetros**
+ `field`: O nome do campo pelo qual classificar.
+ `order`: Use `1` para ordem crescente ou `-1` decrescente.

## Exemplo (MongoDB Shell)
<a name="sort-examples"></a>

O exemplo a seguir demonstra o uso do `$sort` estágio para solicitar produtos por preço em ordem decrescente.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.products.aggregate([
  { $sort: { price: -1 } }
]);
```

**Saída**

```
[
  { _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 }
]
```

## Exemplos de código
<a name="sort-code"></a>

Para ver um exemplo de código para usar o estágio de `$sort` agregação, escolha a guia do idioma que você deseja 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>

O operador `$split` de agregação no Amazon DocumentDB é usado para dividir uma string em uma matriz de substrings, com base em um delimitador especificado. Isso pode ser útil para analisar campos de cadeia de caracteres complexos e extrair componentes individuais para processamento adicional.

**Parâmetros**
+ `string`: A string a ser dividida.
+ `delimiter`: o caractere ou cadeia de caracteres usado para dividir a cadeia de caracteres de entrada.

## Exemplo (MongoDB Shell)
<a name="split-examples"></a>

Neste exemplo, usamos `$split` para separar os componentes de um campo “Mesa” em uma matriz, facilitando o processamento dos dados.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.people.aggregate([
  { $project: { parts: { $split: ["$Desk", "-"] } } }
]);
```

**Saída**

```
{ "_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" ] }
```

A saída de `$split` cria uma matriz que pode ser usada no aplicativo para exibir as informações para os funcionários.

## Exemplos de código
<a name="split-code"></a>

Para ver um exemplo de código para usar o `$split` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0.

O `$sqrt` operador no Amazon DocumentDB é usado para calcular a raiz quadrada de um número.

**Parâmetros**
+ `expression`: o argumento pode ser qualquer expressão válida, desde que seja resolvido em um número não negativo.

## Exemplo (MongoDB Shell)
<a name="sqrt-examples"></a>

O exemplo a seguir demonstra o uso do `$sqrt` operador para calcular a raiz quadrada de um número.

**Crie documentos de amostra**

```
db.numbers.insertMany([
  { "_id": 1, "number": 16 },
  { "_id": 2, "number": 36 },
  { "_id": 3, "number": 64 }
]);
```

**Exemplo de consulta**

```
db.numbers.aggregate([
  { $project: {
    "_id": 1,
    "square_root": { $sqrt: "$number" }
  }}
]);
```

**Saída**

```
[
  { _id: 1, square_root: 4 },
  { _id: 2, square_root: 6 },
  { _id: 3, square_root: 8 }
]
```

## Exemplos de código
<a name="sqrt-code"></a>

Para ver um exemplo de código para usar o `$sqrt` comando, escolha a guia do idioma que você deseja 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>

O `$strLenBytes` operador no Amazon DocumentDB é usado para determinar o tamanho de uma string em bytes. Isso é útil quando você precisa entender o tamanho de armazenamento de um campo de string, especialmente ao lidar com caracteres Unicode que podem usar mais de um byte por caractere.

**Parâmetros**
+ `expression`: a expressão em cadeia de caracteres para calcular o comprimento de.

## Exemplo (MongoDB Shell)
<a name="strLenBytes-examples"></a>

Este exemplo demonstra como usar o `$strLenBytes` operador para calcular o comprimento dos campos de string em bytes.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      "Desk": 1,
      "length": { $strLenBytes: "$Desk" }
    }
  }
])
```

**Saída**

```
{ "_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 }
```

Observe que o comprimento da string “Düsseldorf-BVV-021" é de 19 bytes, o que é diferente do número de pontos de código (18) devido ao caractere Unicode “Ü” ocupar 2 bytes.

## Exemplos de código
<a name="strLenBytes-code"></a>

Para ver um exemplo de código para usar o `$strLenBytes` comando, escolha a guia do idioma que você deseja 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>

O `$strLenCP` operador no Amazon DocumentDB é usado para determinar o tamanho de uma expressão de string em pontos de código (caracteres Unicode). Isso é útil quando você precisa saber o número de caracteres em uma string, em vez do número de bytes.

**Parâmetros**
+ `expression`: a expressão de string para a qual retornar o comprimento em pontos de código.

## Exemplo (MongoDB Shell)
<a name="strLenCP-examples"></a>

O exemplo a seguir demonstra o uso do `$strLenCP` operador para determinar o comprimento das cadeias de caracteres com caracteres Unicode.

**Crie documentos de amostra**

```
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" }
])
```

**Exemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      "Desk": 1,
      "length": { $strLenCP: "$Desk" }
    }
  }
])
```

**Saída**

```
{ "_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 a diferença na medida do comprimento da string “Düsseldorf-BVV-021", que contém um caractere Unicode (Ü). O `$strLenCP` operador conta corretamente o número de caracteres Unicode, enquanto o `$strLenBytes` operador conta o número de bytes.

## Exemplos de código
<a name="strLenCP-code"></a>

Para ver um exemplo de código para usar o `$strLenCP` comando, escolha a guia do idioma que você deseja usar:

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

Aqui está um exemplo de uso do `$strLenCP` operador em um aplicativo Node.js com o driver 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 ]

Aqui está um exemplo de uso do `$strLenCP` operador em um aplicativo Python com o PyMongo driver:

```
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>

O `$strcasecmp` operador no Amazon DocumentDB realiza uma comparação sem distinção entre maiúsculas e minúsculas entre duas cadeias de caracteres. Ele retorna um valor inteiro indicando a comparação lexicográfica das duas cadeias de caracteres de entrada, ignorando as diferenças entre maiúsculas e minúsculas.

**Parâmetros**
+ `string1`: a primeira string a ser comparada.
+ `string2`: a segunda string a ser comparada.

## Exemplo (MongoDB Shell)
<a name="strcasecmp-examples"></a>

Este exemplo demonstra como usar o `$strcasecmp` operador para comparar cadeias de caracteres de localização de mesa em uma `people` coleção, ignorando as diferenças entre maiúsculas e minúsculas.

**Crie documentos de amostra**

```
db.people.insertMany([
  { "_id": 1, "Desk": "mke233-wi" },
  { "_id": 2, "Desk": "MKE233-WI" },
  { "_id": 3, "Desk": "mke233-wi" }
]);
```

**Exemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      item: 1,
      compare: { $strcasecmp: ["$Desk", "mke233-wi"] }
    }
  }
]);
```

**Saída**

```
{ "_id" : 1, "compare" : 0 }
{ "_id" : 2, "compare" : 0 }
{ "_id" : 3, "compare" : 0 }
```

A saída mostra que a comparação entre o `&quot;Desk&quot;` campo e a string `&quot;mke233-wi&quot;` retorna `0` para todos os três documentos, indicando que as strings são iguais quando as maiúsculas e minúsculas são ignoradas.

## Exemplos de código
<a name="strcasecmp-code"></a>

Para ver um exemplo de código para usar o `$strcasecmp` comando, escolha a guia do idioma que você deseja 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>

O `$substr` operador no Amazon DocumentDB é usado para extrair uma substring de uma determinada string. É particularmente útil quando você precisa definir substrings com base em uma faixa de caracteres, em vez de uma faixa de bytes. Isso é especialmente importante ao lidar com cadeias de caracteres Unicode, nas quais o número de bytes usados para representar um caractere pode variar.

**Parâmetros**
+ `string`: a string de entrada da qual extrair a substring.
+ `start`: A posição inicial (com base em zero) da substring a ser extraída. Pode ser uma expressão inteira não negativa.
+ `length`: o número de caracteres na substring extraída. Pode ser uma expressão inteira não negativa.

## Exemplo (MongoDB Shell)
<a name="substr-examples"></a>

Neste exemplo, demonstraremos o uso de `$substr` para extrair a abreviatura estadual da mesa de um funcionário.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      "state": { $substr: ["$Desk", 12, 3] }
    }
  }
])
```

**Saída**

```
{ "_id": 1, "state": "NRW" },
{ "_id": 2, "state": "HBB" },
{ "_id": 3, "state": "SHH" },
{ "_id": 4, "state": "BBB" }
```

## Exemplos de código
<a name="substr-code"></a>

Para ver um exemplo de código para usar o `$substr` comando, escolha a guia do idioma que você deseja 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>

O `$substrBytes` operador no Amazon DocumentDB é usado para extrair uma substring de uma string com base em um intervalo de bytes especificado. Esse operador é útil quando você precisa extrair uma substring de uma string e o número de bytes necessários para representar cada caractere na string é importante.

Diferentemente`$substrCP`, que opera com base no número de pontos de código Unicode, `$substrBytes` opera no número de bytes necessários para representar os caracteres na string. Isso pode ser particularmente útil ao trabalhar com cadeias de caracteres que contêm caracteres não ASCII, pois esses caracteres podem exigir mais de um byte para serem representados.

\$1Nota: \$1 está obsoleto `$substr` desde a versão 3.4. `$substr`agora é um alias para`$substrBytes`.

**Parâmetros**
+ `string`: a string de entrada da qual a substring será extraída.
+ `startByte`: A posição do byte inicial com base em zero da substring a ser extraída. Um valor negativo pode ser usado para especificar uma posição a partir do final da string.
+ `length`: o número de bytes na substring a ser extraída.

## Exemplo (MongoDB Shell)
<a name="substrBytes-examples"></a>

Neste exemplo, usaremos `$substrBytes` para extrair uma substring de uma string que contém caracteres não ASCII.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      "state": { $substrBytes: [ "$Desk", 12, 3] }
    }
  }
])
```

**Saída**

```
{ "_id": 1, "state": "NRW" },
{ "_id": 2, "state": "HBB" },
{ "_id": 3, "state": "SHH" },
{ "_id": 4, "state": "BBB" }
```

Neste exemplo, usamos `$substrBytes` para extrair uma substring de 3 bytes a partir do 12º byte do campo. `Desk` Isso nos permite extrair a abreviatura de estado de 2 caracteres, mesmo que a string possa conter caracteres não ASCII.

## Exemplos de código
<a name="substrBytes-code"></a>

Para ver um exemplo de código para usar o `$substrBytes` comando, escolha a guia do idioma que você deseja 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>

O `$substrCP` operador no Amazon DocumentDB é usado para extrair uma substring de uma string, onde a substring é especificada como um intervalo de pontos de código UTF-8 (CP). Esse operador é particularmente útil ao trabalhar com cadeias de caracteres Unicode, pois permite extrair substrings sem precisar se preocupar com a representação de bytes subjacente dos caracteres.

Ao contrário do `$substrBytes` operador, que opera em posições de bytes, o `$substrCP` operador trabalha com posições de pontos de código. Isso facilita o trabalho com cadeias de caracteres que contêm caracteres não ASCII, pois o número de pontos de código pode não corresponder ao número de bytes ou caracteres.

**Parâmetros**
+ `string`: a string de entrada da qual extrair a substring.
+ `start`: a posição inicial do ponto de código (com base em zero) da qual extrair a substring.
+ `length`: o número de pontos de código a serem extraídos.

## Exemplo (MongoDB Shell)
<a name="substrCP-examples"></a>

Neste exemplo, usaremos o `$substrCP` operador para extrair a abreviatura do estado de uma string contendo a localização da mesa do funcionário.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.people.aggregate([
  {
    $project: {
      "state": { $substrCP: ["$Desk", 25, 2] }
    }
  }
]);
```

**Saída**

```
{ "_id" : 1, "state" : "MN" }
{ "_id" : 2, "state" : "LA" }
{ "_id" : 3, "state" : "CA" }
```

Neste exemplo, sabemos que a abreviatura do estado começa no 25º ponto de código no `Desk` campo e tem 2 pontos de código. Ao usar o `$substrCP` operador, podemos extrair a abreviatura do estado sem precisar nos preocupar com a representação de bytes subjacente da string.

## Exemplos de código
<a name="substrCP-code"></a>

Para ver um exemplo de código para usar o `$substrCP` comando, escolha a guia do idioma que você deseja 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()
```

Nos exemplos do Node.js e do Python, usamos o `$substrCP` operador para extrair a abreviatura do estado do `Desk` campo, semelhante ao exemplo do MongoDB Shell.

------

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

O `$subtract` operador no Amazon DocumentDB é usado para subtrair valores. Ele pode ser usado para subtrair datas, números ou uma combinação de ambos. Esse operador é útil para calcular a diferença entre duas datas ou subtrair um valor de um número.

**Parâmetros**
+ `expression1`: o primeiro valor a ser subtraído.
+ `expression2`: o segundo valor a ser subtraído. `<expression1>`

## Exemplo (MongoDB Shell)
<a name="subtract-examples"></a>

O exemplo a seguir demonstra como usar o `$subtract` operador para calcular a diferença entre duas datas.

**Crie um documento de amostra**

```
db.dates.insert([
  {
  "_id": 1,
  "startDate": ISODate("2023-01-01T00:00:00Z"),
  "endDate": ISODate("2023-01-05T12:00:00Z")
  }
]);
```

**Exemplo de consulta**

```
db.dates.aggregate([
  {
    $project: {
      _id: 1,
      durationDays: {
        $divide: [
          { $subtract: ["$endDate", "$startDate"] },
          1000 * 60 * 60 * 24  // milliseconds in a day
        ]
      }
    }
  }
]);
```

**Saída**

```
[ { _id: 1, durationDays: 4.5 } ]
```

Neste exemplo, o `$subtract` operador é usado para calcular a diferença entre `$endDate` e `$startDate` em dias.

## Exemplos de código
<a name="subtract-code"></a>

Para ver um exemplo de código para usar o `$subtract` comando, escolha a guia do idioma que você deseja 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>

O `$sum` operador no Amazon DocumentDB retorna a soma da expressão especificada para cada documento em um grupo. É um operador acumulador de grupos que normalmente é usado no estágio \$1group de um pipeline de agregação para realizar cálculos de soma.

**Parâmetros**
+ `expression`: A expressão numérica a ser somada. Isso pode ser um caminho de campo, uma expressão ou uma constante.

## Exemplo (MongoDB Shell)
<a name="sum-examples"></a>

O exemplo a seguir demonstra o uso do `$sum` operador para calcular o total de vendas de cada produto.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.sales.aggregate([
  { $group: {
      _id: "$product",
      totalSales: { $sum: { $multiply: [ "$price", "$quantity" ] } }
    }}
]);
```

**Saída**

```
[
  { "_id": "abc", "totalSales": 50 },
  { "_id": "xyz", "totalSales": 120 }
]
```

## Exemplos de código
<a name="sum-code"></a>

Para ver um exemplo de código para usar o `$sum` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0.

Não é compatível com o cluster elástico.

O `$switch` operador é um operador de expressão condicional no Amazon DocumentDB que permite avaliar uma lista de expressões de caso e retornar o valor do primeiro caso avaliado como verdadeiro ou um valor padrão se nenhuma expressão de caso for verdadeira.

**Parâmetros**
+ `branches`: uma matriz de documentos, cada um com um campo de caso que contém a expressão booleana a ser avaliada e um campo then que contém o valor a ser retornado se a expressão de maiúsculas e minúsculas for verdadeira.
+ `default`: (opcional) O valor a ser retornado se nenhuma das expressões de maiúsculas e minúsculas for verdadeira.

## Exemplo (MongoDB Shell)
<a name="switch-examples"></a>

O exemplo a seguir demonstra o uso do `$switch` operador para determinar o custo de envio de um pedido com base no total do pedido.

**Crie documentos de amostra**

```
db.orders.insertMany([
  { _id: 1, total: 50 },
  { _id: 2, total: 150 },
  { _id: 3, total: 250 }
]);
```

**Exemplo 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
        }
      }
    }
  }
])
```

**Saída**

```
[
  {
    "_id": 1,
    "total": 50,
    "shippingCost": 5
  },
  {
    "_id": 2,
    "total": 150,
    "shippingCost": 10
  },
  {
    "_id": 3,
    "total": 250,
    "shippingCost": 15
  }
]
```

## Exemplos de código
<a name="switch-code"></a>

Para ver um exemplo de código para usar o `$switch` comando, escolha a guia do idioma que você deseja 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()
```

------

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

O `$toBool` operador no Amazon DocumentDB converte uma expressão em um valor booleano.

**Parâmetros**
+ `expression`: a expressão a ser convertida em um valor booleano.

**Nota**: Qualquer string é convertida em. `true`

## Exemplo (MongoDB Shell)
<a name="toBool-examples"></a>

O exemplo a seguir demonstra o uso do `$toBool` operador para normalizar os valores de estado do dispositivo de diferentes tipos de dados.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.deviceStates.aggregate([
  {
    $project: {
      _id: 1,
      deviceId: 1,
      isActive: { $toBool: "$status" }
    }
  }
]);
```

**Saída**

```
[
  { "_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 }
]
```

## Exemplos de código
<a name="toBool-code"></a>

Para ver um exemplo de código para usar o `$toBool` comando, escolha a guia do idioma que você deseja 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>

Novo da versão 4.0

O operador `$toDate` de agregação no Amazon DocumentDB é usado para converter uma string de data ou data e hora em um tipo de data BSON. Essa é a operação inversa do `$dateToString` operador.

**Parâmetros**
+ `dateString`: uma representação em cadeia de caracteres de uma data ou data e hora a serem convertidas em um tipo de data BSON.
+ `format`: (opcional) Uma string que especifica o formato do`dateString`. Se não for fornecido, o operador tentará analisá-los `dateString` em vários formatos padrão de data e hora.
+ `timezone`: (opcional) Uma string representando o fuso horário a ser usado para a conversão. Se não for fornecido, o fuso horário local será usado.

## Exemplo (MongoDB Shell)
<a name="toDate-examples"></a>

O exemplo a seguir demonstra como usar o `$toDate` operador para converter uma string de data em um tipo de data BSON.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.events.aggregate([
  {
    $project: {
      eventName: 1,
      eventTimeDate: { $toDate: "$eventTime" }
    }
  }
]);
```

**Saída**

```
[
  {
    "_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")
  }
]
```

## Exemplos de código
<a name="toDate-code"></a>

Para ver um exemplo de código para usar o `$toDate` comando, escolha a guia do idioma que você deseja 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()
```

------

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

Novo da versão 4.0

O `$toDecimal` operador no Amazon DocumentDB é usado para converter um valor no tipo de dados Decimal128. Isso é útil quando você precisa realizar aritmética decimal precisa ou lidar com valores decimais grandes que não podem ser representados com precisão usando o tipo de dados Double.

**Parâmetros**
+ `expression`: a expressão a ser convertida para o tipo de dados Decimal128.

## Exemplo (MongoDB Shell)
<a name="toDecimal-examples"></a>

Este exemplo demonstra como usar o `$toDecimal` operador para converter um valor de string em um tipo de dados Decimal128.

**Crie documentos de amostra**

```
db.numbers.insertOne({ _id: 1, value: "3.14" });
db.numbers.insertOne({ _id: 2, value: "2.71" });
```

**Exemplo de consulta**

```
db.numbers.aggregate([
  { $project: {
    _id: 1,
    decimalValue: { $toDecimal: "$value" }
  }}
])
```

**Saída**

```
[
  { "_id" : 1, "decimalValue" : Decimal128("3.14") },
  { "_id" : 2, "decimalValue" : Decimal128("2.71") }
]
```

## Exemplos de código
<a name="toDecimal-code"></a>

Para ver um exemplo de código para usar o `$toDecimal` comando, escolha a guia do idioma que você deseja 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()
```

------

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

Novo a partir da versão 4.0

O `$toDouble` operador no Amazon DocumentDB é usado para converter um valor em um número de ponto flutuante de 64 bits de precisão dupla. Isso pode ser útil quando você precisa realizar operações aritméticas em valores que não estão originalmente em um formato numérico.

**Parâmetros**

`&lt;expression&gt;`: a expressão a ser convertida em um valor duplo. Isso pode ser qualquer expressão válida que seja resolvida em um valor numérico, de string ou booleano.

## Exemplo (MongoDB Shell)
<a name="toDouble-examples"></a>

Este exemplo demonstra como usar o `$toDouble` operador para converter um valor de string em um valor numérico com a finalidade de realizar um cálculo matemático.

**Crie documentos de amostra**

```
db.numbers.insertMany([
  { _id: 1, value: "10.5" },
  { _id: 2, value: "20.25" },
  { _id: 3, value: "7" }
])
```

**Exemplo de consulta**

```
db.numbers.aggregate([
  {
    $project: {
      _id: 1,
      value: 1,
      double_value: { $toDouble: "$value" },
      double_plus_five: { $add: [{ $toDouble: "$value" }, 5] }
    }
  }
])
```

**Saída**

```
[
  { "_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 }
]
```

## Exemplos de código
<a name="toDouble-code"></a>

Para ver um exemplo de código para usar o `$toDouble` comando, escolha a guia do idioma que você deseja 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>

Novo da versão 4.0

O `$toInt` operador no Amazon DocumentDB é usado para converter um valor de entrada em um tipo de dados inteiro. Esse operador é útil quando você precisa garantir que um campo ou expressão seja representado como um número inteiro, o que pode ser importante para determinadas operações ou tarefas de processamento de dados.

**Parâmetros**
+ `expression`: a expressão a ser convertida em um número inteiro.

## Exemplo (MongoDB Shell)
<a name="toInt-examples"></a>

O exemplo a seguir demonstra como usar o `$toInt` operador para converter um valor de string em um número inteiro.

**Crie documentos de amostra**

```
db.numbers.insertMany([
  { "name": "one", "value": "1" },
  { "name": "hundred", "value": "100" }
]);
```

**Exemplo de consulta**

```
db.numbers.aggregate([
  { $project: {
    "_id": 0,
    "name": 1,
    "intValue": { $toInt: "$value" }
  }}
]);
```

**Saída**

```
{ "name": "one", "intValue": 1 }
{ "name": "hundred", "intValue": 100 }
```

## Exemplos de código
<a name="toInt-code"></a>

Para ver um exemplo de código para usar o `$toInt` comando, escolha a guia do idioma que você deseja 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()
```

------

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

Novo a partir da versão 4.0

O `$toLong` operador no Amazon DocumentDB é usado para converter um valor em um tipo de dados inteiro (longo) de 64 bits. Isso pode ser útil quando você precisa realizar operações aritméticas ou comparações em valores numéricos que podem ser armazenados como cadeias de caracteres ou outros tipos de dados.

**Parâmetros**
+ `expression`: a expressão a ser convertida em um número inteiro de 64 bits.

## Exemplo (MongoDB Shell)
<a name="toLong-examples"></a>

Este exemplo demonstra como usar o `$toLong` operador para converter um valor de string em um inteiro de 64 bits.

**Crie documentos de amostra**

```
db.numbers.insertMany([
  { _id: 1, value: "42" },
  { _id: 3, value: "9223372036854775807" }
]);
```

**Exemplo de consulta**

```
db.numbers.aggregate([
  {
    $project: {
      _id: 1,
      longValue: { $toLong: "$value" }
    }
  }
])
```

**Saída**

```
[
  { "_id" : 1, "longValue" : 42 },
  { "_id" : 3, "longValue" : 9223372036854775807 }
]
```

## Exemplos de código
<a name="toLong-code"></a>

Para ver um exemplo de código para usar o `$toLong` comando, escolha a guia do idioma que você deseja 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>

O `$toLower` operador no Amazon DocumentDB é usado para converter uma string em minúsculas.

**Parâmetros**
+ `expression`: a expressão de string a ser convertida em minúsculas.

## Exemplo (MongoDB Shell)
<a name="toLower-examples"></a>

O exemplo a seguir demonstra como usar o `$toLower` operador para converter o `Desk` campo em minúsculas.

**Crie documentos de amostra**

```
db.locations.insertMany([
  { "_id": 1, "Desk": "Düsseldorf-BVV-021" },
  { "_id": 2, "Desk": "Munich-HGG-32a" }
]);
```

**Exemplo de consulta**

```
db.locations.aggregate([
  { $project: { item: { $toLower: "$Desk" } } }
]);
```

**Saída**

```
{ "_id" : 1, "item" : "düsseldorf-bvv-021" }
{ "_id" : 2, "item" : "munich-hgg-32a" }
```

## Exemplos de código
<a name="toLower-code"></a>

Para ver um exemplo de código para usar o `$toLower` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0

O `$toObjectId` operador no Amazon DocumentDB é usado para converter uma representação em cadeia de caracteres de um em um ObjectId tipo de ObjectId dados real. Isso pode ser útil ao trabalhar com dados que foram armazenados como representações de seqüências de caracteres ObjectIds, pois permite realizar operações que exigem o tipo de ObjectId dados.

**Parâmetros**
+ `expression`: uma expressão em cadeia de caracteres representando um valor válido ObjectId.

## Exemplo (MongoDB Shell)
<a name="toObjectId-examples"></a>

O exemplo a seguir demonstra como usar o `$toObjectId` operador para converter uma representação em cadeia de caracteres de an ObjectId para o tipo de ObjectId dados.

**Crie documentos de amostra**

```
db.employees.insertMany([
  { _id: 1, empId:"64e5f8886218c620cf0e8f8a", name: "Carol Smith", employeeId: "c720a" },
  { _id: 2, empId:"64e5f94e6218c620cf0e8f8c", name: "Bill Taylor", employeeId: "c721a" }
]);
```

**Exemplo de consulta**

```
db.employees.aggregate([
  { $project: {
    "empIdAsObjectId": {$toObjectId: "$empId"}}
  }
]);
```

**Saída**

```
[
  { _id: 1, empIdAsObjectId: ObjectId('64e5f8886218c620cf0e8f8a') },
  { _id: 2, empIdAsObjectId: ObjectId('64e5f94e6218c620cf0e8f8c') }
]
```

## Exemplos de código
<a name="toObjectId-code"></a>

Para ver um exemplo de código para usar o `$toObjectId` comando, escolha a guia do idioma que você deseja 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>

Novo da versão 4.0

O `$toString` operador no Amazon DocumentDB é usado para converter um valor de qualquer tipo (exceto null) em uma representação de string. Isso pode ser útil quando você precisa realizar operações de string em valores que não estão originalmente no formato de string.

**Parâmetros**
+ `expression`: a expressão a ser convertida em uma string.

## Exemplo (MongoDB Shell)
<a name="toString-examples"></a>

O exemplo a seguir demonstra como usar o `$toString` operador para converter valores numéricos em cadeias de caracteres.

**Crie documentos de amostra**

```
db.numbers.insertMany([
  { "_id": 1, "value": 42 },
  { "_id": 2, "value": 3.14 }
]);
```

**Exemplo de consulta**

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

**Saída**

```
{ "_id": 1, "valueAsString": "42" }
{ "_id": 2, "valueAsString": "3.14" }
```

## Exemplos de código
<a name="toString-code"></a>

Para ver um exemplo de código para usar o `$toString` comando, escolha a guia do idioma que você deseja 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>

O `$toUpper` operador no Amazon DocumentDB é usado para converter uma string em maiúsculas.

**Parâmetros**
+ `expression`: a expressão de seqüência de caracteres a ser convertida em maiúsculas.

## Exemplo (MongoDB Shell)
<a name="toUpper-examples"></a>

O exemplo a seguir demonstra o uso do `$toUpper` operador para converter o `Desk` campo em maiúsculas.

**Crie documentos de amostra**

```
db.locations.insertMany([
  { "_id": 1, "Desk": "düsseldorf-bvv-021" },
  { "_id": 2, "Desk": "munich-hgg-32a" }
]);
```

**Exemplo de consulta**

```
db.locations.aggregate([
  { $project: { item: { $toUpper: "$Desk" } } }
]);
```

**Saída**

```
{ "_id" : 1, "item" : "DüSSELDORF-BVV-021" }
{ "_id" : 2, "item" : "MUNICH-HGG-32A" }
```

## Exemplos de código
<a name="toUpper-code"></a>

Para ver um exemplo de código para usar o `$toUpper` comando, escolha a guia do idioma que você deseja 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>

Novo da versão 4.0

O `$trim` operador no Amazon DocumentDB é usado para remover caracteres de espaço em branco and/or à esquerda de uma string.

**Parâmetros**
+ `input`: A expressão de string a ser cortada.
+ `chars`: (opcional) Especifica os caracteres a serem cortados do início e do final da entrada, o padrão é espaço em branco.

## Exemplo (MongoDB Shell)
<a name="trim-examples"></a>

O exemplo a seguir demonstra como usar o `$trim` operador para remover espaços em branco à esquerda e à direita de uma string.

**Crie documentos de amostra**

```
db.people.insertMany([
  { "name": "   John Doe   " },
  { "name": "   Bob Johnson   " }
])
```

**Exemplo de consulta**

```
db.people.aggregate([
  { $project: {
    "name": { $trim: {input: "$name"}}
  }}
])
```

**Saída**

```
[
  { "name": "John Doe" },
  { "name": "Bob Johnson" }
]
```

## Exemplos de código
<a name="trim-code"></a>

Para ver um exemplo de código para usar o `$trim` comando, escolha a guia do idioma que você deseja 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>

O operador `$type` de agregação retorna o tipo de dados BSON de um campo especificado. Isso é útil para identificar o tipo de dados dos valores de campo durante as operações de agregação.

**Parâmetros**
+ `expression`: o campo ou expressão cujo tipo deve ser retornado.

## Exemplo (MongoDB Shell)
<a name="type-aggregation-examples"></a>

O exemplo a seguir demonstra o uso do `$type` operador para identificar o tipo de dados do campo de preço de cada produto.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.inventory.aggregate([
  {
    $project: {
      item: 1,
      price: 1,
      priceType: { $type: "$price" }
    }
  }
]);
```

**Saída**

```
[
  { _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' }
]
```

## Exemplos de código
<a name="type-aggregation-code"></a>

Para ver um exemplo de código para usar o operador de `$type` agregação, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 8.0

Não é compatível com o cluster elástico.

O estágio `$unset` de agregação no Amazon DocumentDB permite que você remova campos dos documentos.

**Parâmetros**
+ `expression`: nome do campo ou lista de vários nomes de campo.

## Exemplo (MongoDB Shell)
<a name="unset-stage-examples"></a>

O exemplo a seguir demonstra o uso do estágio de `$unset` agregação para remover o `price` campo.

**Crie documentos de amostra**

```
db.inventory.insertMany([
  { item: "pencil", quantity: 100, price: 0.24},
  { item: "pen", quantity: 204, price: 1.78 }
]);
```

**Exemplo de agregação**

```
db.inventory.aggregate([
  {
    $unset: "price"
  }
])
```

**Saída**

```
[
  {
    _id: ObjectId('69248951d66dcae121d2950d'),
    item: 'pencil',
    quantity: 100
  },
  {
    _id: ObjectId('69248951d66dcae121d2950e'),
    item: 'pen',
    quantity: 204
  }
]
```

## Exemplos de código
<a name="unset-stage-code"></a>

Para ver um exemplo de código para usar o `$unset` comando, escolha a guia do idioma que você deseja 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>

O `$unwind` operador é usado para desconstruir um campo de matriz dos documentos de entrada para gerar um documento para cada elemento. Isso pode ser útil quando você deseja realizar operações nos elementos individuais de uma matriz, como filtrar, classificar ou transformar os dados.

**Parâmetros**
+ `path`: o caminho para o campo de matriz a ser desenrolado.
+ `includeArrayIndex`: (opcional) Especifica o nome do novo campo para conter o índice do elemento da matriz.
+ `preserveNullAndEmptyArrays`: (opcional) Determina se a operação mantém o documento original quando o campo de matriz é nulo ou uma matriz vazia.

## Exemplo (MongoDB Shell)
<a name="unwind-examples"></a>

O exemplo a seguir demonstra como usar o `$unwind` operador para desconstruir um campo de matriz e realizar outras operações nos elementos individuais.

**Crie documentos de amostra**

```
db.people.insertMany([
  { _id: 1, name: "jon", hobbies: ["painting", "dancing", "singing"] },
  { _id: 2, name: "jane", hobbies: ["reading", "swimming"] },
  { _id: 3, name: "jack", hobbies: [] }
])
```

**Exemplo de consulta**

```
db.people.aggregate([
  { $unwind: "$hobbies" }
])
```

**Saída**

```
[
  { _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' }
]
```

## Exemplos de código
<a name="unwind-code"></a>

Para ver um exemplo de código para usar o `$unwind` comando, escolha a guia do idioma que você deseja 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()
```

------

# \$1VectorSearch
<a name="vectorSearch"></a>

Novo a partir da versão 8.0

Não é compatível com o cluster elástico.

O `$vectorSearch` operador no Amazon DocumentDB permite que você realize a pesquisa vetorial, um método usado no aprendizado de máquina para encontrar pontos de dados semelhantes comparando suas representações vetoriais usando métricas de distância ou similaridade. Esse recurso combina a flexibilidade e a rica consulta de um banco de dados de documentos baseado em JSON com o poder da pesquisa vetorial, permitindo que você crie casos de uso de aprendizado de máquina e IA generativa, como pesquisa semântica, recomendação de produtos e muito mais.

**Parâmetros**
+ `<exact>`(opcional): Sinalizador que especifica se a pesquisa Exact Nearest Neighbor (ENN) ou Approximate Nearest Neighbor (ANN) deve ser executada. O valor pode ser um dos seguintes:
+ false - para executar uma pesquisa ANN
+ true - para executar a pesquisa ENN

Se omitido ou definido como falso, `numCandidates` é obrigatório.

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

## Exemplo (MongoDB Shell)
<a name="vectorSearch-examples"></a>

O exemplo a seguir demonstra como usar o `$vectorSearch` operador para encontrar descrições de produtos semelhantes com base em suas representações vetoriais.

**Crie documentos de amostra**

```
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]
  }
]);
```

**Criar índice de pesquisa vetorial**

```
db.runCommand(
    {
        createIndexes: "products",
        indexes: [{
            key: {
                "description_vector": "vector"
            },
            vectorOptions: {
                type: "hnsw",
                dimensions: 3,
                similarity: "cosine",
                m: 16,
                efConstruction: 64
            },
            name: "description_index"
        }]
    }
);
```

**Exemplo de consulta**

```
db.products.aggregate([
  { $vectorSearch: {
      index: "description_index",
      limit: 2,
      numCandidates: 10,
      path: "description_vector",
      queryVector: [0.1, 0.2, 0.3]
    }
  }
]);
```

**Saída**

```
[
  {
    "_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 ]
  }
]
```

## Exemplos de código
<a name="vectorSearch-code"></a>

Para ver um exemplo de código para usar o `$vectorSearch` comando, escolha a guia do idioma que você deseja 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>

O `$week` operador no Amazon DocumentDB retorna o número da semana de uma data (0-53) com base no padrão ISO 8601. O número da semana é calculado com base no ano e no dia da semana, com segunda-feira como o primeiro dia da semana.

**Parâmetros**

Nenhum

## Exemplo (MongoDB Shell)
<a name="week-examples"></a>

O exemplo a seguir demonstra como usar o `$week` operador para recuperar o número da semana de uma determinada data.

**Crie documentos de amostra**

```
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") }
]);
```

**Exemplo de consulta**

```
db.events.aggregate([
  { $project: {
    _id: 1,
    week: { $week: "$date" }
  }}
]);
```

**Saída**

```
[
  { "_id": 1, "week": 1 },
  { "_id": 2, "week": 2 },
  { "_id": 3, "week": 53 }
]
```

## Exemplos de código
<a name="week-code"></a>

Para ver um exemplo de código para usar o `$week` comando, escolha a guia do idioma que você deseja 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>

O `$year` operador no Amazon DocumentDB extrai o componente ano de uma data ou timestamp.

**Parâmetros**
+ `expression`: a expressão de data ou carimbo de data/hora da qual extrair o componente do ano.

## Exemplo (MongoDB Shell)
<a name="year-examples"></a>

O exemplo a seguir demonstra como usar o `$year` operador para extrair o componente ano de um campo de data.

**Crie documentos de amostra**

```
db.events.insertMany([
  { "_id": 1, "date": ISODate("2023-04-15T00:00:00Z") },
  { "_id": 3, "date": ISODate("2021-12-31T00:00:00Z") }
]);
```

**Exemplo de consulta**

```
db.events.aggregate([
  { $project: { year: { $year: "$date" } } }
]);
```

**Saída**

```
[
  { "_id": 1, "year": 2023 },
  { "_id": 3, "year": 2021 }
]
```

## Exemplos de código
<a name="year-code"></a>

Para ver um exemplo de código para usar o `$year` comando, escolha a guia do idioma que você deseja 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>

O `$zip` operador no Amazon DocumentDB permite combinar várias matrizes em uma única matriz de tuplas (pares de valores-chave). Isso é útil quando você precisa criar novos documentos ou objetos combinando dados de diferentes fontes ou matrizes em um documento.

**Parâmetros**
+ `inputs`: uma matriz de expressões que se resolvem em matrizes. Essas matrizes serão combinadas em uma única matriz de tuplas.
+ `useLongestLength`: (opcional) Se`true`, a matriz de saída tiver o comprimento da matriz de entrada mais longa, preenchendo matrizes mais curtas com valores. `null` Se`false`, a matriz de saída terá o comprimento da matriz de entrada mais curta.
+ `defaults`: (opcional) Uma matriz de valores padrão a serem usados para as tuplas se a matriz de entrada correspondente for menor que a matriz de entrada mais longa e `useLongestLength` for. `true`

## Exemplo (MongoDB Shell)
<a name="zip-examples"></a>

O exemplo a seguir demonstra como usar o `$zip` operador para combinar duas matrizes em uma única matriz de tuplas.

**Crie documentos de amostra**

```
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"]
  }
])
```

**Exemplo de consulta**

```
db.grades.aggregate([
  {
    $project: {
      "name": 1,
      "scoredClasses": {
        $zip: {
          inputs: ["$scores", "$classes"],
          useLongestLength: true,
          defaults: [null, null]
        }
      }
    }
  }
])
```

**Saída**

```
[
  {
    "_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"]
    ]
  }
]
```

## Exemplos de código
<a name="zip-code"></a>

Para ver um exemplo de código para usar o `$zip` comando, escolha a guia do idioma que você deseja 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()
```

------

# Geoespacial
<a name="mongo-apis-geospatial-operators"></a>

Esta seção fornece informações detalhadas sobre operadores geoespaciais suportados pelo 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>

O `$geometry` operador no Amazon DocumentDB é usado para especificar um objeto geométrico GeoJSON como parte de uma consulta geoespacial. Esse operador é usado em conjunto com outros operadores de consulta geoespacial, como `$geoWithin` e `$geoIntersects` para realizar consultas espaciais em seus dados.

No Amazon DocumentDB, o `$geometry` operador oferece suporte aos seguintes tipos de geometria GeoJSON:
+ Point
+ LineString
+ Polígono
+ MultiPoint
+ MultiLineString
+ MultiPolygon
+ GeometryCollection

**Parâmetros**
+ `type`: O tipo do objeto de geometria GeoJSON, por exemplo,,, etc. `Point` `Polygon`
+ `coordinates`: uma matriz de coordenadas representando a geometria. A estrutura da matriz de coordenadas depende do tipo de geometria.

## Exemplo (MongoDB Shell)
<a name="geometry-examples"></a>

O exemplo a seguir demonstra como usar o `$geometry` operador para realizar uma `$geoIntersects` consulta no Amazon DocumentDB.

**Crie documentos de amostra**

```
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]
      ]]
    }
  }
]);
```

**Exemplo 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]
        ]]
      }
    }
  }
})
```

**Saída**

```
[
  {
    "_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]
        ]
      ]
    }
  }
]
```

## Exemplos de código
<a name="geometry-code"></a>

Para ver um exemplo de código para usar o `$geometry` comando, escolha a guia do idioma que você deseja 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>

O `$geoIntersects` operador no Amazon DocumentDB é usado para encontrar documentos cujos dados geoespaciais se cruzam com um objeto GeoJSON especificado. Esse operador é útil para aplicativos que exigem a identificação de documentos com base em sua relação espacial com uma determinada forma geográfica, como um polígono ou multipolígono.

**Parâmetros**
+ `$geometry`: Um objeto GeoJSON que representa a forma para verificar a interseção. Os tipos de objeto GeoJSON compatíveis `Point` são`LineString`,, e. `Polygon` `MultiPolygon`

## Exemplo (MongoDB Shell)
<a name="geoIntersects-examples"></a>

O exemplo a seguir demonstra como usar o `$geoIntersects` operador para encontrar o nome do estado de um determinado conjunto de coordenadas no Amazon DocumentDB.

**Crie documentos de amostra**

```
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]
      ]]
    }
  }
]);
```

**Exemplo de consulta**

```
var location = [-73.965355, 40.782865];

db.states.find({
  "loc": {
    "$geoIntersects": {
      "$geometry": {
        "type": "Point",
        "coordinates": location
      }
    }
  }
}, {
  "name": 1
});
```

**Saída**

```
{ "_id" : ObjectId("536b0a143004b15885c91a2c"), "name" : "New York" }
```

## Exemplos de código
<a name="geoIntersects-code"></a>

Para ver um exemplo de código para usar o `$geoIntersects` comando, escolha a guia do idioma que você deseja 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>

O `$geoWithin` operador no Amazon DocumentDB é usado para encontrar documentos cujos dados de localização (representados como objetos GeoJSON) estão completamente contidos em uma forma especificada, como um polígono ou multipolígono. Isso é útil para consultar objetos localizados em uma região geográfica específica.

**Parâmetros**
+ `$geometry`: um objeto GeoJSON que representa a forma a ser consultada.

## Exemplo (MongoDB Shell)
<a name="geoWithin-examples"></a>

O exemplo a seguir demonstra como usar o `$geoWithin` operador para encontrar todos os aeroportos localizados no estado de Nova York.

**Crie documentos de amostra**

```
// 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]
        }
    }
]);
```

**Exemplo 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
});
```

**Saída**

```
[
  {
    "name": "John F. Kennedy International Airport",
    "type": "airport",
    "code": "JFK"
  },
  {
    "name": "LaGuardia Airport",
    "type": "airport",
    "code": "LGA"
  }
]
```

## Exemplos de código
<a name="geoWithin-code"></a>

Para ver um exemplo de código para usar o `$geoWithin` comando, escolha a guia do idioma que você deseja 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>

O `$maxDistance` operador no Amazon DocumentDB é usado para especificar a distância máxima (em metros) de um ponto GeoJSON em que os documentos devem estar para serem incluídos nos resultados da consulta. Esse operador é usado em conjunto com o `$nearSphere` operador para realizar consultas geoespaciais.

**Parâmetros**
+ `$maxDistance`: a distância máxima (em metros) do ponto de referência em que os documentos devem estar para serem incluídos nos resultados da consulta.

## Exemplo (MongoDB Shell)
<a name="maxDistance-examples"></a>

O exemplo a seguir demonstra como usar o `$maxDistance` operador no Amazon DocumentDB para encontrar todas as capitais estaduais em um raio de 100 quilômetros de Boston.

**Crie documentos de amostra**

```
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] } }
]);
```

**Exemplo de consulta**

```
db.capitals.find(
  {
    location: {
      $nearSphere: {
        $geometry: { type: "Point", coordinates: [-71.0589, 42.3601] },
        $maxDistance: 100000
      }
    }
  },
  { state: 1, city: 1, _id: 0 }
);
```

**Saída**

```
[
  { "state": "Rhode Island", "city": "Providence" },
  { "state": "New Hampshire", "city": "Concord" }
]
```

## Exemplos de código
<a name="maxDistance-code"></a>

Para ver um exemplo de código para usar o `$maxDistance` comando, escolha a guia do idioma que você deseja 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`é um operador de busca usado em conjunto com `$nearSphere` ou `$geoNear` para filtrar documentos que estejam pelo menos na distância mínima especificada do ponto central. Esse operador é suportado no Amazon DocumentDB e funciona de forma semelhante à sua contraparte no MongoDB.

**Parâmetros**
+ `$minDistance`: A distância mínima (em metros) do ponto central para incluir documentos nos resultados.

## Exemplo (MongoDB Shell)
<a name="minDistance-examples"></a>

Neste exemplo, encontraremos todos os restaurantes em um raio de 2 quilômetros de um local específico em Seattle, Washington.

**Crie documentos de amostra**

```
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]
    }
  }
]);
```

**Exemplo de consulta**

```
db.usarestaurants.find({
  "location": {
    "$nearSphere": {
      "$geometry": {
        "type": "Point",
        "coordinates": [-122.3516, 47.6156]
      },
      "$minDistance": 1,
      "$maxDistance": 2000
    }
  }
}, {
  "name": 1
});
```

**Saída**

```
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "name" : "Noodle House" }
{ "_id" : ObjectId("611f3da985009a81ad38e74c"), "name" : "Pike Place Grill" }
```

## Exemplos de código
<a name="minDistance-code"></a>

Para ver um exemplo de código para usar o `$minDistance` comando, escolha a guia do idioma que você deseja 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>

O `$near` operador no Amazon DocumentDB é usado para encontrar documentos que estão geograficamente próximos a um ponto especificado. Ele retorna documentos ordenados por distância, com os documentos mais próximos primeiro. Esse operador requer um índice geoespacial 2dsphere e é útil para consultas de proximidade em dados de localização.

**Parâmetros**
+ `$geometry`: Um objeto GeoJSON Point que define o ponto central para a consulta próxima.
+ `$maxDistance`: (opcional) A distância máxima em metros do ponto especificado que um documento pode estar para corresponder à consulta.
+ `$minDistance`: (opcional) A distância mínima em metros do ponto especificado que um documento pode estar para corresponder à consulta.

**Requisitos de índice**
+ `2dsphere index`: Obrigatório para consultas geoespaciais em dados do GeoJSON Point.

## Exemplo (MongoDB Shell)
<a name="near-examples"></a>

O exemplo a seguir demonstra como usar o `$near` operador para encontrar os restaurantes mais próximos de um local específico em Seattle, Washington.

**Crie documentos de amostra**

```
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] }
  }
]);
```

**Crie um índice 2dsphere**

```
db.usarestaurants.createIndex({ "location": "2dsphere" });
```

**Exemplo de consulta com GeoJSON Point**

```
db.usarestaurants.find({
  location: {
    $near: {
      $geometry: {
        type: "Point",
        coordinates: [-122.3516, 47.6156]
      },
      $maxDistance: 100,
      $minDistance: 10
    }
  }
});
```

**Saída**

```
{
  "_id" : ObjectId("69031ec9ea1c2922a1ce5f4a"),
  "name" : "Noodle House",
  "city" : "Seattle",
  "state" : "Washington",
  "rating" : 4.8,
  "location" : {
    "type" : "Point",
    "coordinates" : [ -122.3517, 47.6159 ]
  }
}
```

## Exemplos de código
<a name="near-code"></a>

Para ver um exemplo de código para usar o `$near` comando, escolha a guia do idioma que você deseja 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>

O `$nearSphere` operador no Amazon DocumentDB é usado para encontrar documentos que estão dentro de uma distância especificada de um ponto geoespacial. Esse operador é particularmente útil para consultas geoespaciais, como encontrar todos os restaurantes dentro de um determinado raio de um determinado local.

**Parâmetros**
+ `$geometry`: Um objeto GeoJSON que representa o ponto de referência. Deve ser um `Point` objeto com `coordinates` campos `type` e.
+ `$minDistance`: (opcional) A distância mínima (em metros) do ponto de referência que os documentos devem estar.
+ `$maxDistance`: (opcional) A distância máxima (em metros) do ponto de referência que os documentos devem estar.

## Exemplo (MongoDB Shell)
<a name="nearSphere-examples"></a>

Neste exemplo, encontraremos todos os restaurantes a 2 quilômetros (2000 metros) de um local específico em Seattle, WA.

**Crie documentos de amostra**

```
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] }
  }
]);
```

**Exemplo de consulta**

```
db.usarestaurants.find({
  location: {
    $nearSphere: {
      $geometry: {
        type: "Point",
        coordinates: [-122.3516, 47.6156]
      },
      $minDistance: 1,
      $maxDistance: 2000
    }
  }
}, {
  name: 1
});
```

**Saída**

```
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "name" : "Noodle House" }
{ "_id" : ObjectId("611f3da985009a81ad38e74c"), "name" : "Pike Place Grill" }
```

## Exemplos de código
<a name="nearSphere-code"></a>

Para ver um exemplo de código para usar o `$nearSphere` comando, escolha a guia do idioma que você deseja 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 e projeção
<a name="mongo-apis-query-projection-operators"></a>

Esta seção fornece informações detalhadas sobre operadores de consulta e projeção suportados pelo 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>

O operador `$` de projeção limita o conteúdo de um campo de matriz para retornar somente o primeiro elemento que corresponda à condição da consulta. Ele é usado para projetar um único elemento de matriz correspondente.

**Parâmetros**
+ `field.$`: o campo de matriz com o operador posicional para projetar o primeiro elemento correspondente.

## Exemplo (MongoDB Shell)
<a name="dollar-projection-examples"></a>

O exemplo a seguir demonstra o uso do operador de `$` projeção para retornar somente o elemento de matriz correspondente.

**Crie documentos de amostra**

```
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] }
]);
```

**Exemplo de consulta**

```
db.students.find(
  { grades: { $gte: 90 } },
  { name: 1, "grades.$": 1 }
);
```

**Saída**

```
{ "_id" : 1, "name" : "Alice", "grades" : [ 92 ] }
{ "_id" : 2, "name" : "Bob", "grades" : [ 92 ] }
{ "_id" : 3, "name" : "Charlie", "grades" : [ 95 ] }
```

Neste exemplo, somente a primeira nota maior ou igual a 90 é retornada para cada aluno.

## Exemplos de código
<a name="dollar-projection-code"></a>

Para ver um exemplo de código para usar o operador de `$` projeção, escolha a guia do idioma que você deseja 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>

O `$all` operador no Amazon DocumentDB é usado para combinar documentos em que o valor de um campo é uma matriz e contém todos os elementos especificados, independentemente da ordem dos elementos na matriz.

**Parâmetros**
+ `field`: o nome do campo a ser verificado.
+ `[value1, value2, ...]`: a lista de valores a serem correspondidos na matriz.

 

**Usando `$elemMatch` dentro de uma `$all` expressão**

Consulte [Usar `$elemMatch` dentro de uma expressão `$all`](functional-differences.md#functional-differences.elemMatch) as limitações relacionadas ao uso do `$elemMatch` operador em uma `$all` expressão.

 

**Dólar (\$1) em nomes de campo**

Consulte as limitações [Dólar (\$1) e ponto (.) nos nomes dos campos](functional-differences.md#functional-differences-dollardot) relacionadas à consulta de campos `$` prefixados `$all` em objetos aninhados.

## Exemplo (MongoDB Shell)
<a name="all-examples"></a>

O exemplo a seguir demonstra o uso do `$all` operador para recuperar documentos em que o campo “Cores” é uma matriz que contém “Vermelho” e “Azul”.

**Crie documentos de amostra**

```
db.example.insertMany([
  { "Item": "Pen", "Colors": ["Red", "Blue", "Green"] },
  { "Item": "Notebook", "Colors": ["Blue", "White"] },
  { "Item": "Poster Paint", "Colors": ["Red", "Yellow", "White"] }
])
```

**Exemplo de consulta**

```
db.example.find({ "Colors": { $all: ["Red", "Blue"] } }).pretty()
```

**Saída**

```
{
  "_id" : ObjectId("6137d6c5b3a1d35e0b6ee6ad"),
  "Item" : "Pen",
  "Colors" : [ 
          "Red", 
          "Blue", 
          "Green" 
  ]
}
```

## Exemplos de código
<a name="all-code"></a>

Para ver um exemplo de código para usar o `$all` comando, escolha a guia do idioma que você deseja 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>

O `$and` operador no Amazon DocumentDB é usado para combinar várias expressões e avaliá-las como uma única condição. Ele retorna `true` se todas as expressões fornecidas forem avaliadas como`true`, e de `false` outra forma. Esse operador é útil para aplicar vários critérios a uma consulta.

**Parâmetros**
+ `expression1`: uma expressão obrigatória que é avaliada como um valor booleano.
+ `expression2`: uma expressão obrigatória que é avaliada como um valor booleano.
+ `...`: expressões adicionais obrigatórias que são avaliadas como valores booleanos.

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

O exemplo a seguir demonstra o uso do `$and` operador para encontrar todos os documentos na coleção “usuários” em que o campo “idade” é maior que 18 e o campo “status” é “ativo”.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.users.find({
  $and: [
    { age: { $gt: 18 } },
    { status: "active" }
  ]
});
```

**Saída**

```
[
  { "_id" : ObjectId("614e3c4b63f5892e7c4e2345"), "name" : "John", "age" : 25, "status" : "active" },
  { "_id" : ObjectId("614e3c4b63f5892e7c4e2347"), "name" : "Alice", "age" : 22, "status" : "active" }
]
```

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

Para ver um exemplo de código para usar o `$and` comando, escolha a guia do idioma que você deseja 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>

O `$bitsAllClear` operador no Amazon DocumentDB é usado para corresponder aos documentos em que todos os bits especificados em um campo são apagados (definidos como 0). Esse operador pode ser útil para realizar operações bit a bit em dados armazenados.

**Parâmetros**
+ `field`: o campo para verificar se os bits especificados estão sendo apagados.
+ `value`: a máscara de bits numérica que especifica quais bits devem ser verificados ou uma lista de posições de bits a serem verificadas. Uma máscara de bits numérica pode ser binária (0b...), decimal, hexadecimal (0x...), octal (0o...) ou binária (). BinData Em uma lista de posições de bits, a posição do bit menos significativo é 0.

## Exemplo (MongoDB Shell)
<a name="bitsAllClear-examples"></a>

O exemplo a seguir demonstra o uso do `$bitsAllClear` operador no Amazon DocumentDB.

**Crie documentos de amostra**

```
db.collection.insertMany([
  { _id: 1, bits: 0b1010 },
  { _id: 2, bits: 0b1100 },
  { _id: 3, bits: 0b0101 }
]);
```

**Exemplo de consulta**

```
db.collection.find({
  bits: { $bitsAllClear: 0b0011 }
})
```

**Saída**

```
{ "_id" : 2, "bits" : 12 }
```

A consulta verifica se todos os bits especificados pela máscara de bits `0b0011` (os dois bits menos significativos) estão apagados no `bits` campo. O documento com `_id` 2 satisfaz essa condição, pois seu `bits` campo tem esses bits limpos.

## Exemplos de código
<a name="bitsAllClear-code"></a>

Para ver um exemplo de código para usar o `$bitsAllClear` comando, escolha a guia do idioma que você deseja 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>

O `$bitsAllSet` operador no Amazon DocumentDB é usado para consultar documentos em que um conjunto específico de bits está todo definido como 1 em um campo. Esse operador permite que você execute operações bit a bit em valores de campo e pode ser útil quando você precisa verificar o estado de bits individuais em um valor numérico.

**Parâmetros**
+ `field`: o nome do campo numérico no qual realizar a operação bit a bit.
+ `value`: a máscara de bits numérica que especifica quais bits devem ser verificados ou uma lista de posições de bits a serem verificadas. Uma máscara de bits numérica pode ser binária (0b...), decimal, hexadecimal (0x...), octal (0o...) ou binária (). BinData Em uma lista de posições de bits, a posição do bit menos significativo é 0.

## Exemplo (MongoDB Shell)
<a name="bitsAllSet-examples"></a>

O exemplo a seguir demonstra como usar o `$bitsAllSet` operador para encontrar documentos em que o `flags` campo tenha todos os bits definidos que são especificados pela máscara de bits.

**Crie documentos de amostra**

```
db.collection.insert([
  { _id: 1, flags: 0b1010 },
  { _id: 2, flags: 0b1100 },
  { _id: 3, flags: 0b1110 }
])
```

**Exemplo de consulta**

```
db.collection.find({ flags: { $bitsAllSet: 0b1100 } })
```

**Saída**

```
{ "_id": 2, "flags": 12 },
{ "_id": 3, "flags": 14 }
```

Neste exemplo, a consulta verifica documentos em que o `flags` campo tem todos os bits definidos pela máscara de bits `0b1100` (que representa o valor decimal 12). Os documentos com `_id` 2 e 3 correspondem a esse critério, pois seus valores de `flags` campo têm todos os bits necessários definidos (o 3º e o 4º bits menos significativos).

## Exemplos de código
<a name="bitsAllSet-code"></a>

Para ver um exemplo de código para usar o `$bitsAllSet` comando, escolha a guia do idioma que você deseja 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>

O `$bitsAnyClear` operador no Amazon DocumentDB é usado para corresponder aos documentos em que qualquer bit especificado em um campo é apagado (definido como 0). Isso pode ser útil para realizar operações bit a bit em valores de campo armazenados em documentos.

**Parâmetros**
+ `field`: O campo a ser verificado.
+ `value`: a máscara de bits numérica que especifica quais bits devem ser verificados ou uma lista de posições de bits a serem verificadas. Uma máscara de bits numérica pode ser binária (0b...), decimal, hexadecimal (0x...), octal (0o...) ou binária (). BinData Em uma lista de posições de bits, a posição do bit menos significativo é 0.

## Exemplo (MongoDB Shell)
<a name="bitsAnyClear-examples"></a>

O exemplo a seguir demonstra como usar o `$bitsAnyClear` operador para verificar se algum bit está limpo no `status` campo da `items` coleção.

**Crie documentos de amostra**

```
db.items.insertMany([
  { "_id": 1, "status": 7 },
  { "_id": 2, "status": 15 },
  { "_id": 3, "status": 31 }
]);
```

**Exemplo de consulta**

```
db.items.find({ "status": { $bitsAnyClear: 8 } })
```

**Saída**

```
{ "_id" : 1, "status" : 7 }
```

Neste exemplo, a consulta verifica documentos em que o `status` campo tem algum bit claro (0) na máscara de bits `8` (binário`1000`). O documento com `status` valores de `7` (binário`111`) corresponde à consulta, pois tem pelo menos um bit claro na máscara de bits fornecida. O bit claro correspondente é o quarto bit menos significativo.

## Exemplos de código
<a name="bitsAnyClear-code"></a>

Para ver um exemplo de código para usar o `$bitsAnyClear` comando, escolha a guia do idioma que você deseja 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>

O `$bitsAnySet` operador no Amazon DocumentDB é usado para consultar documentos em que pelo menos um bit é definido como 1 nos bits especificados em um campo. Esse operador permite que você execute operações bit a bit nos valores armazenados nos campos, permitindo consultas e análises eficientes de dados com características bit a bit.

**Parâmetros**
+ `field`: o nome do campo ao qual aplicar a operação bit a bit.
+ `value`: a máscara de bits numérica que especifica quais bits devem ser verificados ou uma lista de posições de bits a serem verificadas. Uma máscara de bits numérica pode ser binária (0b...), decimal, hexadecimal (0x...), octal (0o...) ou binária (). BinData Em uma lista de posições de bits, a posição do bit menos significativo é 0.

## Exemplo (MongoDB Shell)
<a name="bitsAnySet-examples"></a>

O exemplo a seguir demonstra como usar o `$bitsAnySet` operador para encontrar documentos nos quais pelo menos um bit está definido no `flags` campo.

**Crie documentos de amostra**

```
db.collection.insertMany([
  { _id: 1, flags: 0b1010 },
  { _id: 2, flags: 0b1100 },
  { _id: 3, flags: 0b0011 },
  { _id: 4, flags: 0b0100 }
]);
```

**Exemplo de consulta**

```
db.collection.find({
  flags: { $bitsAnySet: 0b1010 }
})
```

**Saída**

```
{ "_id" : 1, "flags" : 10 }
{ "_id" : 2, "flags" : 12 }
{ "_id" : 3, "flags" : 3 }
```

A consulta retorna os documentos em que pelo menos um dos bits especificados na máscara de bits `0b1010` está definido no `flags` campo.

## Exemplos de código
<a name="bitsAnySet-code"></a>

Para ver um exemplo de código para usar o `$bitsAnySet` comando, escolha a guia do idioma que você deseja 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>

O `$comment` operador no Amazon DocumentDB é usado para anexar um comentário a uma consulta. Isso pode ser útil para fornecer contexto ou informações adicionais sobre a consulta, o que pode ser útil para fins de depuração ou documentação. O comentário em anexo aparecerá como parte da saída de operações como db.currentOp ().

**Parâmetros**
+ `string`: o comentário anexado à consulta.

## Exemplo (MongoDB Shell)
<a name="comment-examples"></a>

O exemplo a seguir demonstra como usar o `$comment` operador no Amazon DocumentDB.

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.users.find({ age: { $gt: 25 } }, { _id: 0, name: 1, age: 1 }).comment("Retrieve users older than 25");
```

**Saída**

```
{ "name" : "John Doe", "age" : 30 }
{ "name" : "Bob Johnson", "age" : 35 }
```

## Exemplos de código
<a name="comment-code"></a>

Para ver um exemplo de código para usar o `$comment` comando, escolha a guia do idioma que você deseja 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>

O `$elemMatch` operador no Amazon DocumentDB é usado para consultar um campo de matriz e retornar documentos em que pelo menos um elemento na matriz corresponda aos critérios especificados. Esse operador é particularmente útil quando você tem estruturas de dados complexas com matrizes aninhadas ou documentos incorporados.

A versão 2.0 do Planner adicionou suporte de índice para`$elemMatch`.

**Parâmetros**
+ `field`: o campo de matriz a ser consultado.
+ `query`: os critérios para comparar com os elementos da matriz.

 

**Usando `$elemMatch` dentro de uma `$all` expressão**

Consulte [Usar `$elemMatch` dentro de uma expressão `$all`](functional-differences.md#functional-differences.elemMatch) as limitações relacionadas ao uso do `$elemMatch` operador em uma `$all` expressão.

## Exemplo (MongoDB Shell)
<a name="elemMatch-examples"></a>

O exemplo a seguir demonstra como usar o `$elemMatch` operador para encontrar documentos em que a `parts` matriz tenha pelo menos um elemento que corresponda aos critérios especificados.

**Crie documentos de amostra**

```
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 }] }
]);
```

**Exemplo de consulta**

```
db.col.find({
  parts: { "$elemMatch": { part: "xyz", qty: { $lt: 11 } } }
})
```

**Saída**

```
{ "_id" : 1, "parts" : [ { "part" : "xyz", "qty" : 10 }, { "part" : "abc", "qty" : 20 } ] }
{ "_id" : 2, "parts" : [ { "part" : "xyz", "qty" : 5 }, { "part" : "abc", "qty" : 10 } ] }
```

## Exemplos de código
<a name="elemMatch-code"></a>

Para ver um exemplo de código para usar o `$elemMatch` comando, escolha a guia do idioma que você deseja 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>

O `$eq` operador no Amazon DocumentDB é usado para combinar documentos em que o valor de um campo é igual ao valor especificado. Esse operador é comumente usado no `find()` método para recuperar documentos que atendem aos critérios especificados.

**Parâmetros**
+ `field`: o campo para verificar a condição de igualdade.
+ `value`: o valor a ser comparado com o campo.

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

O exemplo a seguir demonstra o uso do `$eq` operador para encontrar todos os documentos em que o `name` campo é igual a. `"Thai Curry Palace"`

**Crie documentos de amostra**

```
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"] }
]);
```

**Exemplo de consulta**

```
db.restaurants.find({ name: { $eq: "Thai Curry Palace" } });
```

**Saída**

```
{ "_id" : ObjectId("68ee586f916df9d39f3d9414"), "name" : "Thai Curry Palace", "cuisine" : "Thai", "features" : [ "Private Dining" ] }
```

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

Para ver um exemplo de código para usar o `$eq` comando, escolha a guia do idioma que você deseja 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>

O `$exists` operador é usado para verificar se um campo existe ou não em um documento. `$exists`particularmente útil ao trabalhar com índices esparsos no Amazon DocumentDB, onde o campo indexado pode não estar presente em todos os documentos.

Para usar um índice esparso que você criou em uma consulta, é necessário usar a cláusula `$exists` nos campos que abrangem o índice. Se você omitir`$exists`, o Amazon DocumentDB não usará o índice esparso para a consulta.

**Parâmetros**
+ `field`: o nome do campo para verificar a existência.
+ `value`: um valor booleano (`true`ou`false`) que especifica se o campo deve existir (`true`) ou não existir (`false`) nos documentos correspondentes.

## Exemplo (MongoDB Shell)
<a name="exists-examples"></a>

O exemplo a seguir demonstra o uso do `$exists` operador com um índice esparso no `special_diets` campo da coleção. `food`

**Crie documentos de amostra**

```
db.food.insertMany([
  { _id: 1, name: "Apple", special_diets: ["vegetarian", "gluten-free"] },
  { _id: 2, name: "Broccoli" },
  { _id: 3, name: "Chicken", special_diets: ["dairy-free"] }
]);
```

**Crie um índice esparso no campo `special\$1diets`**

```
db.food.createIndex({ "special_diets": 1 }, { sparse: true, name: "special_diets_sparse_asc" });
```

**Exemplo de consulta**

```
db.food.find({ "special_diets": { $exists: true } });
```

**Saída**

```
[
  { "_id" : 1, "name" : "Apple", "special_diets" : [ "vegetarian", "gluten-free" ] },
  { "_id" : 3, "name" : "Chicken", "special_diets" : [ "dairy-free" ] }
]
```

## Exemplos de código
<a name="exists-code"></a>

Para ver um exemplo de código para usar o `$exists` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0.

Não é compatível com o cluster elástico.

O `$expr` operador no Amazon DocumentDB permite que você use expressões de agregação dentro da linguagem de consulta. Ele permite que você realize comparações e cálculos complexos em campos em um documento, da mesma forma que você usaria os estágios do pipeline de agregação.

**Parâmetros**
+ `expression`: uma expressão que retorna um valor booleano, permitindo que você realize comparações e cálculos nos campos do documento.

## Exemplo (MongoDB Shell)
<a name="expr-examples"></a>

O exemplo a seguir demonstra como usar o `$expr` operador para encontrar todos os documentos em que o `manufacturingCost` campo é maior que o `price` campo.

**Crie documentos de amostra**

```
db.inventory.insertMany([
  { item: "abc", manufacturingCost: 500, price: 100 },
  { item: "def", manufacturingCost: 300, price: 450 },
  { item: "ghi", manufacturingCost: 400, price: 120 }
]);
```

**Exemplo de consulta**

```
db.inventory.find({
  $expr: {
    $gt: ["$manufacturingCost", "$price"]
  }
})
```

**Saída**

```
{ "_id" : ObjectId("60b9d4d68d2cac581bc5a89a"), "item" : "abc", "manufacturingCost" : 500, "price" : 100 },
{ "_id" : ObjectId("60b9d4d68d2cac581bc5a89c"), "item" : "ghi", "manufacturingCost" : 400, "price" : 120 }
```

## Exemplos de código
<a name="expr-code"></a>

Para ver um exemplo de código para usar o `$expr` comando, escolha a guia do idioma que você deseja 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>

O `$gt` operador no Amazon DocumentDB é usado para selecionar documentos em que o valor do campo especificado é maior que o valor especificado. Esse operador é útil para filtrar e consultar dados com base em comparações numéricas.

**Parâmetros**
+ `field`: O campo a ser comparado.
+ `value`: O valor a ser comparado.

## Exemplo (MongoDB Shell)
<a name="gt-examples"></a>

O exemplo a seguir demonstra como usar o `$gt` operador para encontrar todos os documentos em que o `age` campo é maior que 30.

**Crie documentos de amostra**

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

**Exemplo de consulta**

```
db.users.find({ age: { $gt: 30 } });
```

**Saída**

```
{ "_id" : ObjectId("6249e5c22a5d39884a0a0001"), "name" : "Jane", "age" : 32 },
{ "_id" : ObjectId("6249e5c22a5d39884a0a0002"), "name" : "Bob", "age" : 45 }
```

## Exemplos de código
<a name="gt-code"></a>

Para ver um exemplo de código para usar o `$gt` comando, escolha a guia do idioma que você deseja 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>

O `$gte` operador no Amazon DocumentDB é usado para combinar valores maiores ou iguais a um valor especificado. Esse operador é útil para filtrar e consultar dados com base em comparações numéricas.

**Parâmetros**
+ `field`: o campo a ser verificado em relação ao valor fornecido.
+ `value`: o valor a ser comparado com o campo.

## Exemplo (MongoDB Shell)
<a name="gte-examples"></a>

O exemplo a seguir demonstra o uso do `$gte` operador no Amazon DocumentDB para encontrar todos os documentos em que o campo “idade” é maior ou igual a 25.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.users.find({ age: { $gte: 25 } }, { _id: 0, name: 1, age: 1 });
```

**Saída**

```
{ "name" : "Jane", "age" : 25 }
{ "name" : "Bob", "age" : 30 }
{ "name" : "Alice", "age" : 35 }
```

## Exemplos de código
<a name="gte-code"></a>

Para ver um exemplo de código para usar o `$gte` comando, escolha a guia do idioma que você deseja 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>

O `$in` operador no Amazon DocumentDB é um operador de consulta lógica que permite encontrar documentos em que o valor de um campo seja igual a qualquer um dos valores especificados em uma matriz.

**Parâmetros**
+ `field`: o campo a ser verificado em relação à matriz fornecida.
+ `[value1, value2, ...]`: uma matriz de valores para corresponder ao campo especificado.

 

**Dólar (`$`) em nomes de campo**

Consulte as limitações [Dólar (\$1) e ponto (.) nos nomes dos campos](functional-differences.md#functional-differences-dollardot) relacionadas à consulta de campos `$` prefixados `$in` em objetos aninhados.

## Exemplo (MongoDB Shell)
<a name="in-examples"></a>

O exemplo a seguir demonstra como usar o `$in` operador para encontrar documentos em que o `color` campo é um dos valores na matriz fornecida.

**Crie documentos de amostra**

```
db.colors.insertMany([
  { "_id": 1, "color": "red" },
  { "_id": 2, "color": "green" },
  { "_id": 3, "color": "blue" },
  { "_id": 4, "color": "yellow" },
  { "_id": 5, "color": "purple" }
])
```

**Exemplo de consulta**

```
db.colors.find({ "color": { "$in": ["red", "blue", "purple"] } })
```

**Saída**

```
{ "_id": 1, "color": "red" },
{ "_id": 3, "color": "blue" },
{ "_id": 5, "color": "purple" }
```

## Exemplos de código
<a name="in-code"></a>

Para ver um exemplo de código para usar o `$in` comando, escolha a guia do idioma que você deseja 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>

Novo a partir da versão 4.0.

Não é compatível com o cluster elástico.

O `$jsonSchema` operador no Amazon DocumentDB é usado para filtrar documentos com base em um esquema JSON especificado. Esse operador permite que você consulte documentos que correspondam a um esquema JSON específico, garantindo que os documentos recuperados atendam aos requisitos estruturais e de tipo de dados específicos.

Usando o operador de consulta de `$jsonSchema` avaliação como parte da criação de uma coleção, você pode validar o esquema dos documentos que estão sendo inseridos na coleção. Para obter informações adicionais, consulte [Usando a validação do esquema JSON](json-schema-validation.md).

**Parâmetros**
+ `required`(matriz): especifica os campos obrigatórios no documento.
+ `properties`(objeto): define o tipo de dados e outras restrições para cada campo no documento.

## Exemplo (MongoDB Shell)
<a name="jsonSchema-examples"></a>

O exemplo a seguir demonstra o uso do `$jsonSchema` operador para filtrar a `employees` coleção para recuperar somente documentos que tenham os `age` campos`name`, `employeeId` e, e o `employeeId` campo seja do tipo. `string`

**Crie documentos de amostra**

```
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" }
]);
```

**Exemplo de consulta**

```
db.employees.aggregate([
  { $match: {
    $jsonSchema: {
      required: ["name", "employeeId", "age"],
      properties: { "employeeId": { "bsonType": "string" } }
    }
  }}
]);
```

**Saída**

```
{ "_id" : ObjectId("6908e8b61f77fc26b2ecd26f"), "name" : { "firstName" : "Emily", "lastName" : "Brown" }, "employeeId" : "2", "age" : 25 }
```

## Exemplos de código
<a name="jsonSchema-code"></a>

Para ver um exemplo de código para usar o `$jsonSchema` comando, escolha a guia do idioma que você deseja 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>

O `$lt` operador no Amazon DocumentDB é usado para combinar valores menores que o valor especificado. Esse operador é útil para filtrar e consultar dados com base em comparações numéricas.

**Parâmetros**
+ `field`: O nome do campo a ser verificado.
+ `value`: O valor a ser comparado.

## Exemplo (MongoDB Shell)
<a name="lt-examples"></a>

O exemplo a seguir demonstra como usar o `$lt` operador para recuperar documentos em que o `Inventory.OnHand` valor seja menor que 50.

**Crie documentos de amostra**

```
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"] }
]);
```

**Exemplo de consulta**

```
db.example.find({ "Inventory.OnHand": { $lt: 50 } })
```

**Saída**

```
{ "_id" : 1, "Inventory" : { "OnHand" : 25, "Sold" : 60 }, "Colors" : [ "Red", "Blue" ] }
{ "_id" : 3, "Inventory" : { "OnHand" : 10, "Sold" : 85 }, "Colors" : [ "Red", "Green" ] }
```

## Exemplos de código
<a name="lt-code"></a>

Para ver um exemplo de código para usar o `$lt` comando, escolha a guia do idioma que você deseja 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>

O operador de `$mod` consulta seleciona documentos em que um valor de campo dividido por um divisor tem um restante especificado. Isso é útil para filtrar documentos com base nas condições aritméticas do módulo.

**Parâmetros**
+ `divisor`: O número pelo qual dividir.
+ `remainder`: O valor restante esperado.

## Exemplo (MongoDB Shell)
<a name="mod-query-examples"></a>

O exemplo a seguir demonstra o uso do `$mod` operador para encontrar todos os pedidos em que a quantidade é um número ímpar.

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.orders.find({ quantity: { $mod: [2, 1] } });
```

**Saída**

```
{ "_id" : 1, "item" : "Widget", "quantity" : 15 }
{ "_id" : 3, "item" : "Tool", "quantity" : 7 }
{ "_id" : 5, "item" : "Part", "quantity" : 9 }
```

Essa consulta retorna documentos em que a quantidade dividida por 2 tem o restante de 1, selecionando efetivamente todas as quantidades ímpares.

## Exemplos de código
<a name="mod-query-code"></a>

Para ver um exemplo de código para usar o operador de `$mod` consulta, escolha a guia do idioma que você deseja 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>

O `$lte` operador no Amazon DocumentDB é usado para combinar documentos em que o valor de um campo especificado é menor ou igual ao valor especificado. Esse operador é útil para filtrar e consultar dados com base em comparações numéricas.

**Parâmetros**
+ `field`: O campo a ser comparado.
+ `value`: O valor a ser comparado.

## Exemplo (MongoDB Shell)
<a name="lte-examples"></a>

O exemplo a seguir demonstra o uso do `$lte` operador para recuperar documentos em que o `quantity` campo é menor ou igual a 10.

**Crie documentos de amostra**

```
db.inventory.insertMany([
  { item: "canvas", qty: 100 },
  { item: "paint", qty: 50 },
  { item: "brush", qty: 10 },
  { item: "paper", qty: 5 }
]);
```

**Exemplo de consulta**

```
db.inventory.find({ qty: { $lte: 10 } });
```

**Saída**

```
{ "_id" : ObjectId("..."), "item" : "brush", "qty" : 10 },
{ "_id" : ObjectId("..."), "item" : "paper", "qty" : 5 }
```

## Exemplos de código
<a name="lte-code"></a>

Para ver um exemplo de código para usar o `$lte` comando, escolha a guia do idioma que você deseja 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>

O `$meta` operador é usado para acessar os metadados associados à execução da consulta atual. Esse operador é usado principalmente para operações de pesquisa de texto, nas quais os metadados podem fornecer informações sobre a relevância dos documentos correspondentes.

**Parâmetros**
+ `textScore`: recupera a pontuação da pesquisa de texto do documento. Essa pontuação indica a relevância do documento para a consulta de pesquisa de texto.

## Exemplo (MongoDB Shell)
<a name="meta-examples"></a>

O exemplo a seguir demonstra como usar o `$meta` operador para recuperar a pontuação da pesquisa de texto para documentos que correspondam a uma consulta de pesquisa de texto.

**Crie documentos de amostra**

```
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." }
]);
```

**Criar índice de texto**

```
db.documents.createIndex({ content: "text" });
```

**Exemplo de consulta**

```
db.documents.find(
  { $text: { $search: "coffee" } },
  { _id: 0, title: 1, content: 1, score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } });
```

**Saída**

```
[
  {
    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
  }
]
```

## Exemplos de código
<a name="meta-code"></a>

Para ver um exemplo de código para usar o `$meta` comando, escolha a guia do idioma que você deseja 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>

O `$ne` operador é usado para combinar documentos em que o valor de um campo não é igual ao valor especificado. É um operador de comparação que pode ser usado em predicados de consulta para filtrar documentos.

A versão 2.0 do Planner adicionou suporte de índice para`$ne`.

**Parâmetros**
+ `field`: O campo a ser verificado.
+ `value`: O valor a ser verificado.

## Exemplo (MongoDB Shell)
<a name="ne-examples"></a>

Neste exemplo, encontraremos todos os documentos na `users` coleção em que o `status` campo não é igual `"active"` a.

**Crie documentos de amostra**

```
db.users.insertMany([
  { name: "John", status: "active" },
  { name: "Jane", status: "inactive" },
  { name: "Bob", status: "suspended" },
  { name: "Alice", status: "active" }
]);
```

**Exemplo de consulta**

```
db.users.find({ status: { $ne: "active" } });
```

**Saída**

```
[
  {
    _id: ObjectId('...'),
    name: 'Jane',
    status: 'inactive'
  },
  {
    _id: ObjectId('...'),
    name: 'Bob',
    status: 'suspended'
  }
]
```

## Exemplos de código
<a name="ne-code"></a>

Para ver um exemplo de código para usar o `$ne` comando, escolha a guia do idioma que você deseja 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>

O `$nin` operador é usado para combinar valores que não estão na matriz especificada. É o inverso do `$in` operador, que corresponde aos valores que estão na matriz especificada.

A versão 2.0 do Planner adicionou suporte de índice para`$nin`.

**Parâmetros**
+ `field`: O campo a ser verificado.
+ `array`: a matriz de valores a serem comparados.

 

**Dólar (`$`) em nomes de campo**

Consulte as limitações [Dólar (\$1) e ponto (.) nos nomes dos campos](functional-differences.md#functional-differences-dollardot) relacionadas à consulta de campos `$` prefixados `$nin` em objetos aninhados.

## Exemplo (MongoDB Shell)
<a name="nin-examples"></a>

O exemplo a seguir demonstra como usar o `$nin` operador para encontrar documentos em que o `category` campo não é igual a “Ficção” ou “Mistério”.

**Crie documentos de amostra**

```
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" }
])
```

**Exemplo de consulta**

```
db.books.find({
  category: {
    $nin: ["Fiction", "Mystery"]
  }
})
```

**Saída**

```
[
  {
    _id: ObjectId('...'),
    title: 'The Martian',
    author: 'Andy Weir',
    category: 'Science Fiction'
  },
  {
    _id: ObjectId('...'),
    title: 'The Alchemist',
    author: 'Paulo Coelho',
    category: 'Philosophy'
  }
]
```

## Exemplos de código
<a name="nin-code"></a>

Para ver um exemplo de código para usar o `$nin` comando, escolha a guia do idioma que você deseja 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>

O `$nor` operador é usado para combinar documentos em que nenhuma das condições de consulta especificadas é verdadeira. É semelhante à operação lógica “NOR”, em que o resultado é verdadeiro se nenhum dos operandos for verdadeiro.

**Parâmetros**
+ `expression1`: A primeira expressão a ser avaliada.
+ `expression2`: A segunda expressão a ser avaliada.
+ `expressionN`: Expressões adicionais para avaliar.

## Exemplo (MongoDB Shell)
<a name="nor-examples"></a>

O exemplo a seguir demonstra o uso do `$nor` operador recuperando documentos em que o `qty` campo não é menor que 20 e o `size` campo não é igual a “XL”.

**Crie documentos de amostra**

```
db.items.insertMany([
  { qty: 10, size: "M" },
  { qty: 15, size: "XL" },
  { qty: 25, size: "L" },
  { qty: 30, size: "XL" }
])
```

**Exemplo de consulta**

```
db.items.find({
  $nor: [
    { qty: { $lt: 20 } },
    { size: "XL" }
  ]
})
```

**Saída**

```
[
  { "_id" : ObjectId("..."), "qty" : 25, "size" : "L" }
]
```

## Exemplos de código
<a name="nor-code"></a>

Para ver um exemplo de código para usar o `$nor` comando, escolha a guia do idioma que você deseja 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>

O `$not` operador é usado para negar o resultado de uma determinada expressão. Ele permite que você selecione documentos nos quais a condição especificada não corresponda.

A versão 2.0 do Planner adicionou suporte de índice para `$not {eq}` e. `$not {in}`

**Parâmetros**
+ `expression`: A expressão a ser negada.

## Exemplo (MongoDB Shell)
<a name="not-examples"></a>

O exemplo a seguir demonstra como usar o `$not` operador para encontrar documentos em que o `status` campo não é igual a “ativo”.

**Crie documentos de amostra**

```
db.users.insertMany([
  { name: "John", status: "active" },
  { name: "Jane", status: "inactive" },
  { name: "Bob", status: "pending" },
  { name: "Alice", status: "active" }
]);
```

**Exemplo de consulta**

```
db.users.find({ status: { $not: { $eq: "active" } } });
```

**Saída**

```
[
  {
    _id: ObjectId('...'),
    name: 'Jane',
    status: 'inactive'
  },
  {
    _id: ObjectId('...'),
    name: 'Bob',
    status: 'pending'
  }
]
```

## Exemplos de código
<a name="not-code"></a>

Para ver um exemplo de código para usar o `$not` comando, escolha a guia do idioma que você deseja 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>

O `$or` operador é usado para realizar uma operação lógica OR em uma matriz de duas ou mais expressões. Ele retorna documentos que correspondem a pelo menos uma das expressões. Esse operador é útil quando você precisa consultar documentos que satisfaçam qualquer uma das várias condições.

**Parâmetros**
+ `expression1`: A primeira expressão a ser avaliada.
+ `expression2`: A segunda expressão a ser avaliada.
+ `...`: expressões adicionais para avaliar (opcional).

## Exemplo (MongoDB Shell)
<a name="or-examples"></a>

O exemplo a seguir demonstra o uso do `$or` operador para encontrar documentos em que `make` seja "TruckForYou" com o modelo “Heavy H1" ou" "com o modelo “Bolid SportForYou 1".

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.cars.find({
  $or: [
    { make: "TruckForYou", model: "Heavy H1" },
    { make: "SportForYou", model: "Bolid 1" }
  ]
});
```

**Saída**

```
[
  {
    _id: ObjectId('...'),
    make: 'TruckForYou',
    model: 'Heavy H1',
    year: 2020
  },
  {
    _id: ObjectId('...'),
    make: 'SportForYou',
    model: 'Bolid 1',
    year: 2021
  }
]
```

## Exemplos de código
<a name="or-code"></a>

Para ver um exemplo de código para usar o `$or` comando, escolha a guia do idioma que você deseja 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>

O `$regex` operador permite que você realize a correspondência de expressões regulares em campos de string. É uma ferramenta poderosa para pesquisar e filtrar documentos com base em padrões complexos.

**Parâmetros**
+ `regular expression`: o padrão de expressão regular correspondente ao campo.
+ `$options`: (opcional) Fornece opções para modificar o comportamento da pesquisa, como distinção entre maiúsculas e minúsculas, correspondência global etc.

## Exemplo (MongoDB Shell)
<a name="regex-examples"></a>

O exemplo a seguir demonstra o uso do `$regex` operador para pesquisar documentos em que o campo “nome” corresponda a um padrão específico.

**Crie documentos de amostra**

```
db.users.insertMany([
  { name: "John Doe" },
  { name: "Jane Smith" },
  { name: "Alice Johnson" },
  { name: "Bob Williams" },
  { name: "Charlie Davis" }
]);
```

**Exemplo de consulta**

```
db.users.find({ name: { $regex: /^A/ } })
```

**Saída**

```
[
  { "_id" : ObjectId("..."), "name" : "Alice Johnson" }
]
```

Essa consulta retornará todos os documentos em que o campo “nome” comece com a letra “A”.

## Exemplos de código
<a name="regex-code"></a>

Para ver um exemplo de código para usar o `$regex` comando, escolha a guia do idioma que você deseja 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>

O operador `$slice` de projeção limita o número de elementos da matriz retornados em um resultado de consulta. Ele permite que você recupere um número específico de elementos do início ou do final de um campo de matriz sem carregar a matriz inteira.

**Parâmetros**
+ `field`: O campo de matriz a ser projetado.
+ `count`: Número de elementos a serem retornados. Valores positivos retornam elementos do início, valores negativos do final.

## Exemplo (MongoDB Shell)
<a name="slice-projection-examples"></a>

O exemplo a seguir demonstra como usar o operador de `$slice` projeção para retornar somente os dois primeiros itens de um campo de matriz.

**Crie documentos de amostra**

```
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"] }
]);
```

**Exemplo de consulta**

```
db.inventory.find(
  {},
  { item: 1, tags: { $slice: 2 } }
)
```

**Saída**

```
{ "_id" : 1, "item" : "notebook", "tags" : [ "office", "school" ] }
{ "_id" : 2, "item" : "pen", "tags" : [ "office", "writing" ] }
{ "_id" : 3, "item" : "folder", "tags" : [ "office", "supplies" ] }
```

## Exemplos de código
<a name="slice-projection-code"></a>

Para ver um exemplo de código para usar o operador de `$slice` projeção, escolha a guia do idioma que você deseja 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>

O operador de `$size` consulta corresponde a documentos em que um campo de matriz tem exatamente o número especificado de elementos. Isso é útil para filtrar documentos com base no tamanho da matriz.

**Parâmetros**
+ `field`: O campo de matriz a ser verificado.
+ `count`: o número exato de elementos que a matriz deve conter.

## Exemplo (MongoDB Shell)
<a name="size-query-examples"></a>

O exemplo a seguir demonstra o uso do `$size` operador para encontrar todos os produtos que têm exatamente três etiquetas.

**Crie documentos de amostra**

```
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"] }
]);
```

**Exemplo de consulta**

```
db.products.find({ tags: { $size: 3 } });
```

**Saída**

```
{ "_id" : 1, "name" : "Laptop", "tags" : [ "electronics", "computers", "portable" ] }
{ "_id" : 3, "name" : "Desk", "tags" : [ "furniture", "office", "workspace" ] }
```

## Exemplos de código
<a name="size-query-code"></a>

Para ver um exemplo de código para usar o operador de `$size` consulta, escolha a guia do idioma que você deseja 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>

O `$text` operador é usado para realizar pesquisas de texto completo em campos indexados por texto em uma coleção de documentos. Esse operador permite pesquisar documentos que contêm palavras ou frases específicas e pode ser combinado com outros operadores de consulta para filtrar os resultados com base em critérios adicionais.

**Parâmetros**
+ `$search`: A sequência de texto a ser pesquisada.

## Exemplo (MongoDB Shell)
<a name="text-examples"></a>

O exemplo a seguir demonstra como usar o `$text` operador para pesquisar documentos contendo a palavra “interesse” e filtrar os resultados com base em um campo “star\$1rating”.

**Crie documentos de amostra**

```
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" }
]);
```

**Criar índice de texto**

```
db.test.createIndex({ comments: "text" });
```

**Exemplo de consulta**

```
db.test.find({$and: [{star_rating: 5}, {$text: {$search: "interest"}}]})
```

**Saída**

```
{ "_id" : 5, "star_rating" : 5, "comments" : "interesting couch" }
{ "_id" : 6, "star_rating" : 5, "comments" : "interested in couch for sale, year 2022" }
```

O comando acima retorna documentos com um campo indexado por texto contendo qualquer forma de “interesse” e uma “avaliação\$1estrela” igual a 5.

## Exemplos de código
<a name="text-code"></a>

Para ver um exemplo de código para usar o `$text` comando, escolha a guia do idioma que você deseja 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>

O `$type` operador é usado para verificar o tipo de dados de um campo em um documento. Ele pode ser usado quando operações ou validações específicas do tipo são necessárias. O `$type` operador retorna o tipo BSON da expressão avaliada. O tipo retornado é uma string, que corresponde ao tipo do campo ou da expressão.

A versão 2.0 do Planner adicionou suporte de índice para`$type`.

**Parâmetros**
+ `expression`: A expressão a ser avaliada.

## Exemplo (MongoDB Shell)
<a name="type-examples"></a>

**Crie documentos de amostra**

```
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 }
]);
```

**Exemplo de consulta**

```
db.documents.find({
  $or: [
    { age: { $type: "number" } },
    { email: { $type: "string" } },
    { name: { $type: "string" } }
  ]
})
```

**Saída**

```
[
  { "_id": 1, "name": "John", "age": 30, "email": "john@example.com" },
  { "_id": 2, "name": "Jane", "age": "25", "email": 123456 }
]
```

Essa consulta retornará os documentos em que o `age` campo é do tipo “número”, o `email` campo é do tipo “string” e o `name` campo é do tipo “string”.

## Exemplos de código
<a name="type-code"></a>

Para ver um exemplo de código para usar o `$type` comando, escolha a guia do idioma que você deseja 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 atualização
<a name="mongo-apis-update-operators"></a>

Esta seção fornece informações detalhadas sobre operadores de atualização compatíveis com o 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>

O operador `$` posicional atualiza o primeiro elemento da matriz que corresponde à condição de consulta. Ele atua como um espaço reservado para a posição do elemento de matriz correspondente.

**Parâmetros**
+ `field.$`: o campo de matriz com o operador posicional para atualizar o primeiro elemento correspondente.

## Exemplo (MongoDB Shell)
<a name="dollar-update-examples"></a>

O exemplo a seguir demonstra o uso do operador `$` posicional para atualizar um elemento específico da matriz.

**Crie documentos de amostra**

```
db.inventory.insertMany([
  { _id: 1, item: "Widget", quantities: [10, 20, 30] },
  { _id: 2, item: "Gadget", quantities: [5, 15, 25] }
]);
```

**Exemplo de consulta**

```
db.inventory.updateOne(
  { _id: 1, quantities: 20 },
  { $set: { "quantities.$": 22 } }
);
```

**Saída**

```
{
  "_id" : 1,
  "item" : "Widget",
  "quantities" : [ 10, 22, 30 ]
}
```

## Exemplos de código
<a name="dollar-update-code"></a>

Para ver um exemplo de código para usar o operador `$` posicional, escolha a guia do idioma que você deseja 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>

O operador `$[]` all posicional atualiza todos os elementos em uma matriz. Ele é usado quando você precisa modificar cada elemento em um campo de matriz.

**Parâmetros**
+ `field.$[]`: o campo de matriz com o operador posicional all para atualizar todos os elementos.

## Exemplo (MongoDB Shell)
<a name="dollarBrackets-update-examples"></a>

O exemplo a seguir demonstra o uso do `$[]` operador para atualizar todos os elementos da matriz.

**Crie documentos de amostra**

```
db.products.insertOne({
  _id: 1,
  name: "Laptop",
  prices: [1000, 1100, 1200]
});
```

**Exemplo de consulta**

```
db.products.updateOne(
  { _id: 1 },
  { $inc: { "prices.$[]": 50 } }
);
```

**Saída**

```
{
  "_id" : 1,
  "name" : "Laptop",
  "prices" : [ 1050, 1150, 1250 ]
}
```

## Exemplos de código
<a name="dollarBrackets-update-code"></a>

Para ver um exemplo de código para usar o `$[]` operador, escolha a guia do idioma que você deseja 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>

O operador posicional `$[<identifier>]` filtrado atualiza todos os elementos da matriz que correspondem às condições de filtro especificadas. Ele é usado com a `arrayFilters` opção de atualizar seletivamente os elementos da matriz.

**Parâmetros**
+ `field.$[identifier]`: o campo de matriz com o operador posicional filtrado.
+ `arrayFilters`: uma matriz de condições de filtro que determinam quais elementos atualizar.

## Exemplo (MongoDB Shell)
<a name="dollarIdentifier-update-examples"></a>

O exemplo a seguir demonstra o uso do `$[<identifier>]` operador para atualizar elementos específicos da matriz com base em uma condição.

**Crie documentos de amostra**

```
db.students.insertOne({
  _id: 1,
  name: "Alice",
  grades: [
    { subject: "Math", score: 85 },
    { subject: "Science", score: 92 },
    { subject: "History", score: 78 }
  ]
});
```

**Exemplo de consulta**

```
db.students.updateOne(
  { _id: 1 },
  { $inc: { "grades.$[elem].score": 5 } },
  { arrayFilters: [{ "elem.score": { $gte: 80 } }] }
);
```

**Saída**

```
{
  "_id" : 1,
  "name" : "Alice",
  "grades" : [
    { "subject" : "Math", "score" : 90 },
    { "subject" : "Science", "score" : 97 },
    { "subject" : "History", "score" : 78 }
  ]
}
```

## Exemplos de código
<a name="dollarIdentifier-update-code"></a>

Para ver um exemplo de código para usar o `$[<identifier>]` operador, escolha a guia do idioma que você deseja 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>

O `$addToSet` operador no Amazon DocumentDB é usado para adicionar um valor a uma matriz somente se o valor ainda não estiver presente na matriz. Isso é útil para garantir que uma matriz contenha elementos exclusivos.

**Parâmetros**
+ `field`: O campo a ser atualizado.
+ `value`: o valor a ser adicionado ao campo da matriz. Isso pode ser um valor único ou uma expressão.

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

O exemplo a seguir demonstra como usar o `$addToSet` operador para adicionar elementos exclusivos a uma matriz.

**Crie documentos de amostra**

```
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"] }
])
```

**Exemplo de consulta**

```
db.products.update(
  { "item": "apple" },
  { $addToSet: { "tags": "green" } }
)
```

**Saída**

```
{ "_id": 1, "item": "apple", "tags": ["fruit", "red", "round", "green"] }
```

Neste exemplo, o `$addToSet` operador adiciona a tag “verde” à matriz “tags” do documento em que o campo “item” é “maçã”. Como “verde” ainda não estava na matriz, ele foi adicionado.

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

Para ver um exemplo de código para usar o `$addToSet` comando, escolha a guia do idioma que você deseja 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>

O `$bit` operador no Amazon DocumentDB permite que você execute operações bit a bit nos bits de um determinado campo. Isso pode ser útil para tarefas como definir, limpar ou verificar o estado de bits individuais em um número.

**Parâmetros**
+ `field`: O campo no qual realizar operações bit a bit.
+ `and`: um valor inteiro usado para realizar uma operação AND bit a bit no campo.
+ `or`: um valor inteiro usado para realizar uma operação OR bit a bit no campo.
+ `xor`: um valor inteiro usado para realizar uma operação XOR bit a bit no campo.

## Exemplo (MongoDB Shell)
<a name="bit-examples"></a>

O exemplo a seguir demonstra como usar o `$bit` operador para realizar operações bit a bit em um campo numérico.

**Crie documentos de amostra**

```
db.numbers.insert([
  { "_id": 1, "number": 5 },
  { "_id": 2, "number": 12 }
])
```

**Exemplo de consulta**

```
db.numbers.update(
  { "_id": 1 },
  { "$bit": { "number": { "and": 3 } } }
)
```

**Saída**

```
{
  "_id": 1,
  "number": 1
}
```

Neste exemplo, o `$bit` operador é usado para realizar uma operação AND bit a bit no campo “número” do documento com o `_id` de 1. O resultado é que o valor do campo “número” é definido como 1, que é o resultado da operação AND bit a bit entre o valor original de 5 e o valor 3.

## Exemplos de código
<a name="bit-code"></a>

Para ver um exemplo de código para usar o `$bit` comando, escolha a guia do idioma que você deseja 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>

O `$currentDate` operador é usado para definir o valor de um campo para a data e a hora atuais. Esse operador é útil para atualizar automaticamente um campo com o carimbo de data/hora atual quando um documento é inserido ou atualizado.

**Parâmetros**
+ `field`: o campo a ser atualizado com a data e a hora atuais.
+ `type`: (opcional) Especifica o tipo de BSON a ser usado na data atual. Pode ser `date` ou `timestamp`.

## Exemplo (MongoDB Shell)
<a name="currentDate-examples"></a>

O exemplo a seguir demonstra como usar o `$currentDate` operador para definir o `lastModified` campo com a data e a hora atuais quando um novo documento é inserido.

**Crie documentos de amostra**

```
db.users.insert({
  name: "John Doe",
  email: "john.doe@example.com"
})
```

**Exemplo de consulta**

```
db.users.updateOne(
  { name: "John Doe" },
  { $currentDate: { lastModified: true } }
)
```

**Exibir documento atualizado**

```
db.users.findOne({ name: "John Doe" })
```

**Saída**

```
{
  _id: ObjectId('...'),
  name: 'John Doe',
  email: 'john.doe@example.com',
  lastModified: ISODate('2025-10-25T22:50:29.963Z')
}
```

## Exemplos de código
<a name="currentDate-code"></a>

Para ver um exemplo de código para usar o `$currentDate` comando, escolha a guia do idioma que você deseja 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>

O `$each` operador é usado em conjunto com outros operadores de atualização, como `$push` e`$addToSet`, para adicionar vários valores a um campo de matriz. Ele permite adicionar vários elementos a uma matriz em uma única operação, em vez de precisar executar várias operações de atualização.

**Parâmetros**
+ `value`: a matriz de valores a serem adicionados ao campo da matriz.

## Exemplo (MongoDB Shell)
<a name="each-examples"></a>

O exemplo a seguir demonstra o uso do `$each` operador com o `$push` operador para adicionar vários elementos a um campo de matriz.

**Crie documentos de amostra**

```
db.fruits.insertOne({
  _id: 1,
  fruits: ["apple", "banana"]
})
```

**Exemplo de consulta**

```
db.fruits.updateOne(
  { _id: 1 },
  { $push: { fruits: { $each: ["cherry", "durian", "elderberry"] } } }
)
```

**Exibir documento atualizado**

```
db.fruits.findOne({ _id: 1 })
```

**Saída**

```
{
  _id: 1,
  fruits: [ 'apple', 'banana', 'cherry', 'durian', 'elderberry' ]
}
```

## Exemplos de código
<a name="each-code"></a>

Para ver um exemplo de código para usar o `$each` comando, escolha a guia do idioma que você deseja 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>

O `$inc` operador é usado para incrementar o valor de um campo em um valor especificado. Ele é usado para atualizar um campo numérico, como um contador ou uma classificação, sem precisar recuperar o valor atual, calcular o novo valor e, em seguida, atualizar o campo.

**Parâmetros**
+ `field`: o nome do campo a ser incrementado.
+ `amount`: o valor pelo qual incrementar o campo. Isso pode ser um valor positivo ou negativo.

## Exemplo (MongoDB Shell)
<a name="inc-examples"></a>

O exemplo a seguir demonstra como usar o `$inc` operador para incrementar o `age` campo de um documento.

**Crie documentos de amostra**

```
db.users.insertOne({_id: 123, name: "John Doe", age: 30})
```

**Exemplo de consulta**

```
db.users.updateOne({_id: 123}, {$inc: {age: 1}})
```

**Exibir documento atualizado**

```
db.users.findOne({_id: 123})
```

**Saída**

```
{ "_id" : 123, "name" : "John Doe", "age" : 31 }
```

## Exemplos de código
<a name="inc-code"></a>

Para ver um exemplo de código para usar o `$inc` comando, escolha a guia do idioma que você deseja 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>

O operador de `$max` atualização atualiza o valor de um campo somente se o valor especificado for maior que o valor do campo atual. Esse operador é útil para manter valores máximos em todas as atualizações.

**Parâmetros**
+ `field`: O campo a ser atualizado.
+ `value`: o valor a ser comparado com o valor do campo atual.

## Exemplo (MongoDB Shell)
<a name="max-update-examples"></a>

O exemplo a seguir demonstra o uso do `$max` operador para atualizar a pontuação mais alta registrada para um jogador.

**Crie documentos de amostra**

```
db.scores.insertMany([
  { _id: 1, player: "Alice", highScore: 85 },
  { _id: 2, player: "Bob", highScore: 92 },
  { _id: 3, player: "Charlie", highScore: 78 }
])
```

**Exemplo de atualização**

```
db.scores.updateOne(
  { _id: 1 },
  { $max: { highScore: 95 } }
)
```

**Resultado**

O `highScore` campo para Alice é atualizado para 95 porque 95 é maior que o valor atual de 85.

```
{ "_id": 1, "player": "Alice", "highScore": 95 }
```

## Exemplos de código
<a name="max-update-code"></a>

Para ver um exemplo de código para usar o `$max` comando, escolha a guia do idioma que você deseja 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>

O operador de `$min` atualização atualiza o valor de um campo somente se o valor especificado for menor que o valor do campo atual. Esse operador é útil para manter valores mínimos em todas as atualizações.

**Parâmetros**
+ `field`: O campo a ser atualizado.
+ `value`: o valor a ser comparado com o valor do campo atual.

## Exemplo (MongoDB Shell)
<a name="min-update-examples"></a>

O exemplo a seguir demonstra o uso do `$min` operador para atualizar a temperatura mais baixa registrada para uma estação meteorológica.

**Crie documentos de amostra**

```
db.weather.insertMany([
  { _id: 1, station: "Station A", lowestTemp: 15 },
  { _id: 2, station: "Station B", lowestTemp: 20 },
  { _id: 3, station: "Station C", lowestTemp: 18 }
])
```

**Exemplo de atualização**

```
db.weather.updateOne(
  { _id: 1 },
  { $min: { lowestTemp: 12 } }
)
```

**Resultado**

O `lowestTemp` campo da Estação A é atualizado para 12 porque 12 é menor que o valor atual de 15.

```
{ "_id": 1, "station": "Station A", "lowestTemp": 12 }
```

## Exemplos de código
<a name="min-update-code"></a>

Para ver um exemplo de código para usar o `$min` comando, escolha a guia do idioma que você deseja 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>

O `$mul` operador no Amazon DocumentDB é usado para multiplicar o valor de um campo por um número especificado. Isso pode ser útil para atualizar vários documentos de forma atômica e consistente, como atualizar milhas de voo com base no status do cartão de crédito.

**Parâmetros**
+ `field`: O campo a ser multiplicado.
+ `multiplier`: o número pelo qual multiplicar o valor do campo.

## Exemplo (MongoDB Shell)
<a name="mul-examples"></a>

Este exemplo demonstra como usar o `$mul` operador para dobrar o `flight_miles` valor de todos os documentos em que o `credit_card` campo está`true`.

**Crie documentos de amostra**

```
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] }
]);
```

**Exemplo de consulta**

```
db.miles.update(
  { "credit_card": { "$eq": true } },
  { "$mul": { "flight_miles.$[]": NumberInt(2) } },
  { "multi": true }
);
```

**Saída**

```
{ "_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 os clientes que têm cartão de crédito, suas milhas de voo foram dobradas.

O operador de matriz `$[]` posicional é usado para aplicar a `$mul` operação a cada elemento na `flight_miles` matriz.

## Exemplos de código
<a name="mul-code"></a>

Para ver um exemplo de código para usar o `$mul` comando, escolha a guia do idioma que você deseja 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>

O `$pop` operador no Amazon DocumentDB é usado para remover o primeiro ou o último elemento de um campo de matriz. É particularmente útil quando você precisa manter uma matriz de tamanho fixo ou implementar uma estrutura de dados semelhante a uma fila em um documento.

**Parâmetros**
+ `field`: o nome do campo de matriz do qual remover um elemento.
+ `value`: um valor inteiro que determina a posição do elemento a ser removido. Um valor de `1` remove o último elemento, enquanto um valor de `-1` remove o primeiro elemento.

## Exemplo (MongoDB Shell)
<a name="pop-examples"></a>

Este exemplo demonstra como usar o `$pop` operador para remover o primeiro e o último elementos de um campo de matriz.

**Crie documentos de amostra**

```
db.users.insertMany([
  { "_id": 1, "name": "John Doe", "hobbies": ["reading", "swimming", "hiking"] },
  { "_id": 2, "name": "Jane Smith", "hobbies": ["cooking", "gardening", "painting"] }
])
```

**Exemplo 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 } })
```

**Saída**

```
{ "_id" : 1, "name" : "John Doe", "hobbies" : [ "swimming", "hiking" ] }
{ "_id" : 2, "name" : "Jane Smith", "hobbies" : [ "cooking", "gardening" ] }
```

## Exemplos de código
<a name="pop-code"></a>

Para ver um exemplo de código para usar o `$pop` comando, escolha a guia do idioma que você deseja 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>

O `$position` modificador no Amazon DocumentDB especifica a localização na matriz na qual `$push` o operador insere elementos. Sem o `$position` modificador, o `$push` operador insere elementos no final da matriz.

**Parâmetros**
+ `field`: o campo de matriz a ser atualizado.
+ `num`: a posição na matriz em que os elementos devem ser inseridos, com base na indexação com base em zero.

**Nota**: Para usar o `$position` modificador, ele deve aparecer com o `$each` modificador.

## Exemplo (MongoDB Shell)
<a name="position-examples"></a>

O exemplo a seguir demonstra como usar o `$position` operador para inserir tarefas em posições específicas em um sistema de gerenciamento de projetos.

**Crie documentos de amostra**

```
db.projects.insertOne({ "_id": 1, "name": "Website Redesign", "tasks": ["Design mockups"] })
```

**Exemplo de consulta 1 - Adicione tarefas urgentes no início**

```
db.projects.updateOne(
   { _id: 1 },
   {
     $push: {
        tasks: {
           $each: ["Security audit", "Performance review"],
           $position: 0
        }
     }
   }
)
```

**Saída 1**

```
{ "_id": 1, "name": "Website Redesign", "tasks": ["Security audit", "Performance review", "Design mockups"] }
```

**Exemplo de consulta 2 - Adicionar tarefas em uma posição 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
        }
     }
   }
)
```

**Saída 2**

```
{ "_id": 2, "name": "Mobile App", "tasks": ["Setup project", "Create wireframes", "Code review", "Testing phase", "Deploy to store"] }
```

## Exemplos de código
<a name="position-code"></a>

Para ver um exemplo de código para usar o `$position` comando, escolha a guia do idioma que você deseja 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>

O `$pull` operador é usado para remover de uma matriz todas as instâncias de um valor ou valores que correspondam a uma condição especificada. Esse operador é útil quando você precisa remover elementos específicos de um campo de matriz em um documento.

**Parâmetros**
+ `field`: o nome do campo de matriz do qual remover o (s) valor (es).
+ `value`: o valor ou condição que determina quais elementos devem ser removidos da matriz.

## Exemplo (MongoDB Shell)
<a name="pull-examples"></a>

O exemplo a seguir demonstra como usar o `$pull` operador para remover elementos de um campo de matriz.

**Crie documentos de amostra**

```
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"]
  }
])
```

**Exemplo de consulta**

```
db.restaurants.updateMany(
  { cuisine: "Italian" },
  { $pull: { features: "Takeout" } }
)
```

**Saída**

```
{
  "acknowledged" : true,
  "matchedCount" : 1,
  "modifiedCount" : 1
}
```

A consulta acima remove o recurso “Takeout” de todos os documentos em que o `cuisine` campo é “italiano”.

## Exemplos de código
<a name="pull-code"></a>

Para ver um exemplo de código para usar o `$pull` comando, escolha a guia do idioma que você deseja 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>

O `$pullAll` operador no Amazon DocumentDB é usado para remover todas as instâncias dos valores especificados de um campo de matriz. Isso é particularmente útil quando você precisa remover vários elementos de uma matriz em uma única operação.

**Parâmetros**
+ `field`: o nome do campo de matriz do qual remover os elementos.
+ `value`: uma matriz de valores a serem removidos do campo da matriz.

## Exemplo (MongoDB Shell)
<a name="pullAll-examples"></a>

O exemplo a seguir demonstra como usar o `$pullAll` operador para remover vários elementos de um campo de matriz.

**Crie documentos de amostra**

```
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"]
  }
])
```

**Exemplo de consulta**

```
db.restaurants.update(
  { "name": "Taj Mahal" },
  { $pullAll: { "features": ["Private Dining", "Live Music"] } }
)
```

**Saída**

```
{
  "name": "Taj Mahal",
  "cuisine": "Indian",
  "features": []
}
```

## Exemplos de código
<a name="pullAll-code"></a>

Para ver um exemplo de código para usar o `$pullAll` comando, escolha a guia do idioma que você deseja 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>

O `$push` operador no Amazon DocumentDB é usado para adicionar um item a um campo de matriz em um documento. Esse operador é particularmente útil quando você precisa acrescentar novos dados a uma matriz existente sem sobrescrever a matriz inteira.

**Parâmetros**
+ `field`: o nome do campo de matriz ao qual o novo elemento deve ser adicionado.
+ `value`: o valor a ser adicionado à matriz.
+ `position`: (opcional) Um modificador que especifica a posição na matriz em que o novo elemento deve ser adicionado. Os modificadores compatíveis incluem `$` (adicionar ao final da matriz) e `$[]` (adicionar ao final da matriz, ignorando quaisquer filtros da matriz).

## Exemplo (MongoDB Shell)
<a name="push-examples"></a>

O exemplo a seguir demonstra como usar o `$push` operador para adicionar novos elementos a um campo de matriz em um documento.

**Crie documentos de amostra**

```
db.users.insert([
  { _id: 1, name: "John Doe", hobbies: ["reading", "swimming"] },
  { _id: 2, name: "Jane Smith", hobbies: ["gardening", "cooking"] }
])
```

**Exemplo de consulta**

```
db.users.updateOne(
  { _id: 1 },
  { $push: { hobbies: "hiking" } }
)
```

**Saída**

```
{
  "acknowledged" : true,
  "matchedCount" : 1,
  "modifiedCount" : 1
}
```

Depois de executar a atualização, o documento com `_id: 1` terá a `hobbies` matriz atualizada para`[&quot;reading&quot;, &quot;swimming&quot;, &quot;hiking&quot;]`.

## Exemplos de código
<a name="push-code"></a>

Para ver um exemplo de código para usar o `$push` comando, escolha a guia do idioma que você deseja 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>

O `$rename` operador no Amazon DocumentDB é usado para renomear um campo em um documento. Esse operador pode ser particularmente útil quando você precisa atualizar a estrutura de seus documentos ou alinhá-los com novos modelos de dados.

**Parâmetros**
+ `field`: O campo a ser renomeado.
+ `newName`: o novo nome do campo.

## Exemplo (MongoDB Shell)
<a name="rename-examples"></a>

O exemplo a seguir demonstra como usar o `$rename` operador para renomear o `&quot;Date.DoW&quot;` campo para `&quot;Date.DayOfWeek&quot;` em um documento com o `&quot;DocName&quot;` campo definido como. `&quot;Document 1&quot;`

**Crie documentos de amostra**

```
db.example.insertOne({
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    },
    "Words": 2482
})
```

**Exemplo de consulta**

```
db.example.update(
    { "DocName": "Document 1" },
    { $rename: { "Date.DoW": "Date.DayOfWeek" } }
)
```

**Saída**

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DayOfWeek": "Saturday"
    },
    "Words": 2482
}
```

## Exemplos de código
<a name="rename-code"></a>

Para ver um exemplo de código para usar o `$rename` comando, escolha a guia do idioma que você deseja 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>

O `$set` operador no Amazon DocumentDB é usado para atualizar o valor de um campo especificado em um documento. Esse operador permite que você adicione novos campos ou modifique os existentes em um documento. É um operador de atualização fundamental no driver Java do MongoDB, compatível com o Amazon DocumentDB.

**Parâmetros**
+ `field`: O campo a ser atualizado.
+ `value`: o novo valor do campo.

## Exemplo (MongoDB Shell)
<a name="set-examples"></a>

O exemplo a seguir demonstra como usar o `$set` operador para atualizar o `Item` campo em um documento.

**Crie documentos de amostra**

```
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
    }
  }
])
```

**Exemplo de consulta**

```
db.example.update(
  { "Item": "Pen" },
  { $set: { "Item": "Gel Pen" } }
)
```

**Saída**

```
{
  "Item": "Gel Pen",
  "Colors": ["Red", "Green", "Blue", "Black"],
  "Inventory": {
    "OnHand": 244,
    "MinOnHand": 72
  }
}
```

## Exemplos de código
<a name="set-code"></a>

Para ver um exemplo de código para usar o `$set` comando, escolha a guia do idioma que você deseja 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>

O `$setOnInsert` operador no Amazon DocumentDB é usado para definir o valor de um campo se um documento estiver sendo inserido, mas não terá efeito se o documento estiver sendo atualizado.

**Parâmetros**
+ `field`: O campo a ser definido.
+ `value`: o valor a ser atribuído ao campo.

## Exemplo (MongoDB Shell)
<a name="setOnInsert-examples"></a>

O exemplo a seguir demonstra o uso do `$setOnInsert` operador no Amazon DocumentDB. Ele cria um novo documento se o documento ainda não existir, mas não tem efeito se o documento estiver sendo atualizado.

**Crie documentos de amostra**

```
db.users.insertOne({
  _id: 1,
  name: "John Doe",
  age: 30
})
```

**Exemplo de consulta 1 - Atualizar documento existente**

```
db.users.update(
  { _id: 1 },
  {
    $set: { age: 31 },
    $setOnInsert: { createdAt: new Date() }
  },
  { upsert: true }
)
```

**Saída 1**

```
{
  _id: 1,
  name: "John Doe",
  age: 31
}
```

A saída mostra que o documento foi atualizado, mas o `createdAt` campo **NÃO foi adicionado** porque o documento já existia. O `$setOnInsert` operador só se aplica ao inserir novos documentos.

**Exemplo de consulta 2 - Inserir novo documento (upsert)**

```
db.users.update(
  { _id: 2 },
  {
    $set: { name: "Jane Smith", age: 25 },
    $setOnInsert: { createdAt: new Date() }
  },
  { upsert: true }
)
```

**Saída 2**

```
{
  _id: 2,
  name: "Jane Smith", 
  age: 25,
  createdAt: ISODate("2025-10-31T09:57:52.459Z")
}
}
```

## Exemplos de código
<a name="setOnInsert-code"></a>

Para ver um exemplo de código para usar o `$setOnInsert` comando, escolha a guia do idioma que você deseja 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>

O operador de `$slice` atualização modifica uma matriz limitando seu tamanho. Quando usado com o `$push` operador, ele restringe o número de elementos em uma matriz, mantendo somente o número especificado dos elementos mais recentes ou mais antigos.

**Parâmetros**
+ `field`: o campo de matriz a ser modificado.
+ `count`: Número máximo de elementos a serem mantidos. Valores positivos mantêm os primeiros N elementos, valores negativos mantêm os últimos N elementos.

## Exemplo (MongoDB Shell)
<a name="slice-update-examples"></a>

O exemplo a seguir demonstra como usar o operador de `$slice` atualização com `$push` para manter uma matriz de tamanho fixo das pontuações recentes.

**Crie documentos de amostra**

```
db.students.insertOne({
  _id: 1,
  name: "Alice",
  scores: [85, 90, 78]
});
```

**Exemplo de consulta**

```
db.students.updateOne(
  { _id: 1 },
  {
    $push: {
      scores: {
        $each: [92, 88],
        $slice: -3
      }
    }
  }
)
```

**Saída**

```
{
  "_id" : 1,
  "name" : "Alice",
  "scores" : [ 78, 92, 88 ]
}
```

Neste exemplo, o `$slice: -3` modificador mantém somente os últimos três elementos após inserir novos valores na matriz.

## Exemplos de código
<a name="slice-update-code"></a>

Para ver um exemplo de código para usar o operador de `$slice` atualização, escolha a guia do idioma que você deseja 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>

O modificador de `$sort` atualização ordena os elementos da matriz quando usado com o `$push` operador. Ele organiza os elementos da matriz em ordem crescente ou decrescente com base nos valores de campo especificados ou nos próprios elementos.

**Parâmetros**
+ `field`: o campo de matriz a ser modificado.
+ `order`: Use `1` para ordem crescente ou `-1` decrescente.

## Exemplo (MongoDB Shell)
<a name="sort-update-examples"></a>

O exemplo a seguir demonstra o uso do `$sort` modificador with `$push` para adicionar novas pontuações do questionário e mantê-las classificadas em ordem decrescente.

**Crie documentos de amostra**

```
db.students.insertOne({
  _id: 1,
  name: "Bob",
  quizzes: [
    { score: 85, date: "2024-01-15" },
    { score: 92, date: "2024-02-10" }
  ]
});
```

**Exemplo de consulta**

```
db.students.updateOne(
  { _id: 1 },
  {
    $push: {
      quizzes: {
        $each: [{ score: 78, date: "2024-03-05" }],
        $sort: { score: -1 }
      }
    }
  }
)
```

**Saída**

```
{
  "_id" : 1,
  "name" : "Bob",
  "quizzes" : [
    { "score" : 92, "date" : "2024-02-10" },
    { "score" : 85, "date" : "2024-01-15" },
    { "score" : 78, "date" : "2024-03-05" }
  ]
}
```

## Exemplos de código
<a name="sort-update-code"></a>

Para ver um exemplo de código para usar o modificador de `$sort` atualização, escolha a guia do idioma que você deseja 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>

O `$unset` operador no Amazon DocumentDB é usado para remover um campo especificado de um documento. Quando um campo é removido usando`$unset`, o campo é excluído do documento e o tamanho do documento é reduzido de acordo. Isso pode ser útil quando você deseja remover dados desnecessários de seus documentos.

**Parâmetros**
+ `field`: o campo a ser removido do documento. Isso pode ser um único campo ou um caminho pontilhado para um campo aninhado.

## Exemplo (MongoDB Shell)
<a name="unset-examples"></a>

O exemplo a seguir demonstra como usar o `$unset` operador para remover o `Words` campo de um documento na `example` coleção.

**Crie documentos de amostra**

```
db.example.insert({
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    },
    "Words": 2482
})
```

**Exemplo de consulta**

```
db.example.update(
    { "DocName" : "Document 1" },
    { $unset: { Words:1 } }
)
```

**Saída**

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    }
}
```

Neste exemplo, o `$unset` operador é usado para remover o `Words` campo do documento `DocName` igual a “Documento 1". O documento resultante não contém mais o `Words` campo.

## Exemplos de código
<a name="unset-code"></a>

Para ver um exemplo de código para usar o `$unset` comando, escolha a guia do idioma que você deseja 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()
```

------