

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# APIsMongoDB, operazioni e tipi di dati supportati in Amazon DocumentDB
<a name="mongo-apis"></a>

Amazon DocumentDB (compatibile con MongoDB) è un servizio di database di documenti veloce, scalabile, ad alta disponibilità e completamente gestito che supporta i carichi di lavoro MongoDB. Amazon DocumentDB è compatibile con MongoDB 3.6, 4.0, 5.0 e 8.0. APIs In questa sezione sono elencate le funzionalità supportate. Per assistenza sull'uso di APIs MongoDB e dei driver, consulta i forum della community di MongoDB. Per ricevere assistenza sull'utilizzo del servizio Amazon DocumentDB, contatta il team di AWS supporto appropriato. Per le differenze funzionali tra Amazon DocumentDB e MongoDB, consulta. [Differenze funzionali: Amazon DocumentDB e MongoDB](functional-differences.md) 

Gli operatori e i comandi MongoDB solo interni o non applicabili a un servizio completamente gestito non sono supportati e non sono inclusi nell'elenco delle funzionalità supportate.

Abbiamo aggiunto oltre 50 funzionalità aggiuntive dal lancio e continueremo a lavorare procedendo a ritroso dai nostri clienti per fornire le funzionalità necessarie. Per informazioni sui lanci più recenti, consulta [Amazon DocumentDB](https://aws.amazon.com/documentdb/resources/) Announcements.

Se c'è una funzionalità non supportata che vorresti che creassimo, faccelo sapere inviando un'e-mail con il tuo AccountID, le funzionalità richieste e il caso d'uso al team di assistenza di [Amazon DocumentDB](mailto:documentdb-feature-request@amazon.com).
+ [Comandi del database](#mongo-apis-database)
+ [Operatori di interrogazione e proiezione](#mongo-apis-query)
+ [Aggiorna gli operatori](#mongo-apis-update)
+ [Dati geospaziali](#mongo-apis-geospatial)
+ [Metodi del cursore](#mongo-apis-cursor)
+ [Operatori della pipeline di aggregazione](#mongo-apis-aggregation-pipeline)
+ [Tipi di dati](#mongo-apis-data-types)
+ [Indici](#mongo-apis-indexes)

## Comandi del database
<a name="mongo-apis-database"></a>

**Topics**
+ [Comandi amministrativi](#mongo-apis-dababase-administrative)
+ [Aggregazione](#mongo-apis-dababase-aggregation)
+ [Autenticazione](#mongo-apis-dababase-authentication)
+ [Comandi diagnostici](#mongo-apis-dababase-diagnostics)
+ [Operazioni di interrogazione e scrittura](#mongo-apis-dababase-query-write)
+ [Comandi di gestione dei ruoli](#mongo-apis-database-role-management)
+ [Comandi delle sessioni](#mongo-apis-dababase-sessions)
+ [Gestione degli utenti](#mongo-apis-dababase-user-management)
+ [Comandi di sharding](#mongo-apis-dababase-sharding)

### Comandi amministrativi
<a name="mongo-apis-dababase-administrative"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  Capped Collections  |  No  |  No  |  No  |  No  |  No  | 
|  cloneCollectionAsCon cappuccio  |  No  |  No  |  No  |  No  |  No  | 
|  collMod  |  Parziale  |  Parziale  |  Parziale  |  Parziale  |  Parziale  | 
|  CollMod: expireAfterSeconds  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  convertToCapped  |  No  |  No  |  No  |  No  |  No  | 
|  copydb  |  No  |  No  |  No  |  No  |  No  | 
|  creazione  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  createView  |  No  |  No  |  No  |  Sì  |  No  | 
|  createIndexes  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  currentOp  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  drop  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  dropDatabase  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  dropIndexes  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  filemd5  |  No  |  No  |  No  |  No  |  No  | 
|  getAuditConfig  |  No  |  Sì  |  Sì  |  Sì  |  No  | 
|  killCursors  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  killOp  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Elenco delle collezioni\$1  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  listDatabases  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  listIndexes  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  reIndex  |  No  |  No  |  Sì  |  Sì  |  No  | 
|  renameCollection  |  Sì   |  Sì  |  Sì  |  Sì  |  No  | 
|  setAuditConfig  |  No  |  Sì  |  Sì  |  Sì  |  No  | 

\$1 La `type` chiave nell'opzione di filtro non è supportata.

### Aggregazione
<a name="mongo-apis-dababase-aggregation"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  aggregate  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  count  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  distinct  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  mapReduce  |  No  |  No  |  No  |  Sì  |  No  | 

### Autenticazione
<a name="mongo-apis-dababase-authentication"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  authenticate  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Logout  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 

### Comandi diagnostici
<a name="mongo-apis-dababase-diagnostics"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  buildInfo  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  collStats  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  connPoolStats  |  No  |  No  |  No  |  No  |  No  | 
|  connectionStatus  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  dataSize  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  dbHash  |  No  |  No  |  No  |  No  |  No  | 
|  dbStats  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  explain  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  explain: executionStats  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  caratteristiche  |  No  |  No  |  No  |  No  |  No  | 
|  hostInfo  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  listCommands  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  profiler  |  [Sì](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  [Sì](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  [Sì](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  [Sì](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  No  | 
|  serverStatus  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  top  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operazioni di interrogazione e scrittura
<a name="mongo-apis-dababase-query-write"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  Change streams  |  [Sì](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  [Sì](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  [Sì](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  [Sì](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  No  | 
|  Elimina  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  find  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  findAndModify  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  getLastError  |  No  |  No  |  No  |  No  |  No  | 
|  getMore  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  getPrevError  |  No  |  No  |  No  |  No  |  No  | 
|  GridFS  |  Sì   |  Sì  |  Sì  |  Sì  |  No  | 
|  insert  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  parallelCollectionScan  |  No  |  No  |  No  |  No  |  No  | 
|  resetError  |  No  |  No  |  No  |  No  |  No  | 
|  aggiorna  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  ReplaceOne  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Comandi di gestione dei ruoli
<a name="mongo-apis-database-role-management"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  createRole  |  Sì   |  Sì  |  Sì  |  Sì  |  No  | 
|  dropAllRolesFromDatabase  |  Sì  |  Sì  |  Sì  |  Sì  |  No  | 
|  dropRole  |  Sì   |  Sì  |  Sì  |  Sì  |  No  | 
|  grantRolesToRuolo  |  Sì   |  Sì  |  Sì  |  Sì  |  No  | 
|  revokeRolesFromRuolo  |  Sì   |  Sì  |  Sì  |  Sì  |  No  | 
|  revokePrivilegesFromRuolo  |  Sì   |  Sì  |  Sì  |  Sì  |  No  | 
|  rolesInfo  |  Sì   |  Sì  |  Sì  |  Sì  |  No  | 
|  updateRole  |  Sì   |  Sì  |  Sì  |  Sì  |  No  | 

### Comandi delle sessioni
<a name="mongo-apis-dababase-sessions"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  Transazione interrotta  |  No  |  Sì  |  Sì  |  Sì  |  No  | 
|  commitTransaction  |  No  |  Sì  |  Sì  |  Sì  |  No  | 
|  Termina le sessioni  |  No  |  No  |  No  |  No  |  No  | 
|   killAllSessions  |  No  |  Sì  |  Sì  |  Sì  |  No  | 
|  killAllSessionsByPattern  |  No  |  No  |  No  |  No  |  No  | 
|  Uccidi sessioni  |  No  |  Sì  |  Sì  |  Sì  |  No  | 
|  Aggiorna le sessioni  |  No  |  No  |  No  |  No  |  No  | 
|  Avvia sessione  |  No  |  Sì  |  Sì  |  Sì  |  No  | 

### Gestione degli utenti
<a name="mongo-apis-dababase-user-management"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  createUser  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  dropAllUsersFromDatabase  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  dropUser  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  grantRolesToUser  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  revokeRolesFromUser  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  updateUser  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Informazioni sugli utenti  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 

### Comandi di sharding
<a name="mongo-apis-dababase-sharding"></a>


| Comando | Cluster elastico | 
| --- | --- | 
|  abortReshardCollection  |  No  | 
|  Aggiunge Shard  |  No  | 
|  addShardToZona  |  No  | 
|  balancerCollectionStatus  |  No  | 
|  Balancer Start  |  No  | 
|  Stato del bilanciatore  |  No  | 
|  Balancer Stop  |  No  | 
|  checkShardingIndex  |  No  | 
|  clearJumboFlag  |  No  | 
|  cleanupOrphaned  |  No  | 
|  cleanupReshardCollection  |  No  | 
|  commitReshardCollection  |  No  | 
|  Abilita la condivisione  |  Sì  | 
|  flushRouterConfig  |  No  | 
|  getShardMap  |  No  | 
|  getShardVersion  |  No  | 
|  isdbgrid  |  No  | 
|  Elenca i frammenti  |  No  | 
|  Chiave mediana  |  No  | 
|  Sposta Chunk  |  No  | 
|  Sposta il primario  |  No  | 
|  Unisci blocchi  |  No  | 
|  refineCollectionShardChiave  |  No  | 
|  Rimuove Shard  |  No  | 
|  removeShardFromZona  |  No  | 
|  Collezione ResHard  |  No  | 
|  setAllowMigrations  |  No  | 
|  setShardVersion  |  No  | 
|  Collezione SHARD  |  Sì  | 
|  Stato di condivisione  |  No  | 
|  dividi  |  No  | 
|  Vettore diviso  |  No  | 
|  Annulla lo sharding  |  No  | 
|  updateZoneKeyIntervallo  |  No  | 

## Operatori di interrogazione e proiezione
<a name="mongo-apis-query"></a>

**Topics**
+ [Operatori per matrice](#mongo-apis-query-array-operators)
+ [Operatori bit a bit](#mongo-apis-query-bitwise-operators)
+ [Operatore di commento](#mongo-apis-query-comment-operator)
+ [Operatori di confronto](#mongo-apis-query-comparison-operators)
+ [Operatori di elementi](#mongo-apis-query-element-operators)
+ [Operatori di interrogazione di valutazione](#mongo-apis-query-evaluation-operators)
+ [Operatori logici](#mongo-apis-query-logical-operators)
+ [Operatori di proiezione](#mongo-apis-projection-operators)

### Operatori per matrice
<a name="mongo-apis-query-array-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1all](all.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1elemMatch](elemMatch.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1size](size-query.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

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


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1bitsAllSet](bitsAllSet.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1bitsAnySet](bitsAnySet.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1bitsAllClear](bitsAllClear.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1bitsAnyClear](bitsAnyClear.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatore di commento
<a name="mongo-apis-query-comment-operator"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1comment](comment.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatori di confronto
<a name="mongo-apis-query-comparison-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1eq](eq.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1gt](gt.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1gte](gte.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1in](in.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1lt](lt.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1lte](lte.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1ne](ne.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1nin](nin.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatori di elementi
<a name="mongo-apis-query-element-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1exists](exists.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1type](type.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatori di interrogazione di valutazione
<a name="mongo-apis-query-evaluation-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1expr](expr.md)  |  No  |  Sì  |  Sì  |  Sì  |  No  | 
|  [\$1jsonSchema](jsonSchema.md)  |  No  |  Sì  |  Sì  |  Sì  |  No  | 
|  [\$1mod](mod-query.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1regex](regex.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1text](text.md)  |  No  |  No  |  Sì  |  Sì  |  No  | 
|  \$1where  |  No  |  No  |  No  |  No  |  No  | 

### Operatori logici
<a name="mongo-apis-query-logical-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1and](and.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1nor](nor.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1not](not.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1or](or.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatori di proiezione
<a name="mongo-apis-projection-operators"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1](dollar-projection.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1elemMatch](elemMatch.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1meta](meta.md)  |  No  |  No  |  Sì  |  Sì  |  No  | 
|  [\$1slice](slice-projection.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

## Aggiorna gli operatori
<a name="mongo-apis-update"></a>

**Topics**
+ [Operatori di array](#mongo-apis-update-array)
+ [Operatori bit a bit](#mongo-apis-update-bitwise)
+ [Operatori sul campo](#mongo-apis-update-field)
+ [Aggiorna modificatori](#mongo-apis-update-modifiers)

### Operatori di array
<a name="mongo-apis-update-array"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1](dollar-update.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1[]](dollarBrackets-update.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1[<identifier>]](dollarIdentifier-update.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1addToSet](addToSet.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1pop](pop.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1pullAll](pullAll.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1pull](pull.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1push](push.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 

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


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1bit](bit.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatori sul campo
<a name="mongo-apis-update-field"></a>


| Operatore | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1currentDate](currentDate.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1inc](inc.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1max](max-update.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1min](min-update.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1mul](mul.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1rename](rename.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1set](set-update.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1setOnInsert](setOnInsert.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1unset](unset-update.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Aggiorna modificatori
<a name="mongo-apis-update-modifiers"></a>


| Operatore | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1each](each.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1position](position.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1slice](slice-update.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1sort](sort-update.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

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

### Specificatori di geometria
<a name="mongo-apis-geospatial-geometry-specifiers"></a>


| Selettori di query | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1box  |  No  |  No  |  No  |  No  |  No  | 
|  \$1center  |  No  |  No  |  No  |  No  |  No  | 
|  \$1centerSphere  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1geometry](geometry.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1maxDistance](maxDistance.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1minDistance](minDistance.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1nearSphere](nearSphere.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  \$1polygon  |  No  |  No  |  No  |  No  |  No  | 
|  \$1uniqueDocs  |  No  |  No  |  No  |  No  |  No  | 

### Selettori di interrogazione
<a name="mongo-apis-geospatial-query-selectors"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1geoIntersects](geoIntersects.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1geoWithin](geoWithin.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1near](near.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1nearSphere](nearSphere.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  \$1polygon  |  No  |  No  |  No  |  No  |  No  | 
|  \$1uniqueDocs  |  No  |  No  |  No  |  No  |  No  | 

## Metodi del cursore
<a name="mongo-apis-cursor"></a>


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

\$1 L'indice `hint` è supportato con le espressioni di indice. Ad esempio, `db.foo.find().hint({x:1})`.

## Operatori della pipeline di aggregazione
<a name="mongo-apis-aggregation-pipeline"></a>

**Topics**
+ [Espressioni dell'accumulatore](#mongo-apis-aggregation-pipeline-accumulator-expressions)
+ [Operatori aritmetici](#mongo-apis-aggregation-pipeline-arithmetic)
+ [Operatori di matrice](#mongo-apis-aggregation-pipeline-array)
+ [Operatori booleani](#mongo-apis-aggregation-pipeline-boolean)
+ [Operatori di confronto](#mongo-apis-aggregation-pipeline-comparison)
+ [Operatori di espressione condizionale](#mongo-apis-aggregation-pipeline-conditional)
+ [Operatore del tipo di dati](#mongo-apis-aggregation-pipeline-data-type)
+ [Operatore di dimensione dei dati](#mongo-apis-aggregation-pipeline-data-size)
+ [Operatori di data](#mongo-apis-aggregation-pipeline-date)
+ [Operatore letterale](#mongo-apis-aggregation-pipeline-literal)
+ [Operatore di unione](#mongo-apis-aggregation-pipeline-merge)
+ [Operatore naturale](#mongo-apis-aggregation-pipeline-natural)
+ [Operatori su set](#mongo-apis-aggregation-pipeline-set)
+ [Operatori sul palco](#mongo-apis-aggregation-pipeline-stage)
+ [Operatori di stringa](#mongo-apis-aggregation-pipeline-string)
+ [Variabili di sistema](#mongo-apis-aggregation-pipeline-system-variables)
+ [Operatore di ricerca testuale](#mongo-apis-aggregation-pipeline-text-search)
+ [Operatori di conversione dei tipi](#mongo-apis-aggregation-pipeline-type)
+ [Operatori variabili](#mongo-apis-aggregation-pipeline-variable)
+ [Operatori vari](#mongo-apis-aggregation-pipeline-misc)

### Espressioni dell'accumulatore
<a name="mongo-apis-aggregation-pipeline-accumulator-expressions"></a>


| Expression | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1accumulatore  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1addToSet](addToSet-aggregation.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1avg](avg.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1count](count.md)  |  -  |  -  |  No  |  No  |  No  | 
|  \$1 covariancePOP  |  No  |  No  |  No  |  No  |  No  | 
|  \$1covarianceAmp  |  No  |  No  |  No  |  No  |  No  | 
|  \$1 DenseRank  |  No  |  No  |  No  |  No  |  No  | 
|  \$1 derivato  |  No  |  No  |  No  |  No  |  No  | 
|  \$1 numero di documento  |  No  |  No  |  No  |  No  |  No  | 
|  \$1expMovingAvg  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1first](first.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  \$1 integrale  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1last](last.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1max](max.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1min](min.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1push](push-aggregation.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  \$1rango  |  No  |  No  |  No  |  No  |  No  | 
|  \$1 turno  |  No  |  No  |  No  |  No  |  No  | 
|  \$1stdDevPop  |  No  |  No  |  No  |  No  |  No  | 
|  \$1stdDevSamp  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1sum](sum.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatori aritmetici
<a name="mongo-apis-aggregation-pipeline-arithmetic"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1abs](abs.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1add](add.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1ceil](ceil.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1divide](divide.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1exp](exp.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1floor](floor.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1ln](ln.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1log](log.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1log10](log10.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1mod](mod.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1multiply](multiply.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1pow](pow.md)  |  No  |  No  |  No  |  Sì  |  No  | 
|  \$1 rotondo  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1sqrt](sqrt.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1subtract](subtract.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  \$1trunc  |  No  |  No  |  No  |  No  |  No  | 

### Operatori di matrice
<a name="mongo-apis-aggregation-pipeline-array"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1arrayElemAt](arrayElemAt.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1arrayToObject](arrayToObject.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1concatArrays](concatArrays.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1filter](filter.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1first](first.md)  |  -  |  -  |  Sì  |  Sì  |  No  | 
|  [\$1in](in-aggregation.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1indexOfArray](indexOfArray.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1isArray](isArray.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1last](last.md)  |  -  |  -  |  Sì  |  Sì  |  No  | 
|  [\$1objectToArray](objectToArray.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1range](range.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1reverseArray](reverseArray.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1reduce](reduce.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1size](size.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1slice](slice.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1zip](zip.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatori booleani
<a name="mongo-apis-aggregation-pipeline-boolean"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1and](and-aggregation.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1not](not-aggregation.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1or](or-aggregation.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatori di confronto
<a name="mongo-apis-aggregation-pipeline-comparison"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1cmp](cmp.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1eq](eq-aggregation.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1gt](gt-aggregation.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1gte](gte-aggregation.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1lt](lt-aggregation.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1lte](lte-aggregation.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1ne](ne-aggregation.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatori di espressione condizionale
<a name="mongo-apis-aggregation-pipeline-conditional"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1cond](cond.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1ifNull](ifNull.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1switch](switch.md)  |  No  |  Sì  |  Sì  |  Sì  |  No  | 

### Operatore del tipo di dati
<a name="mongo-apis-aggregation-pipeline-data-type"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1type](type-aggregation.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatore di dimensione dei dati
<a name="mongo-apis-aggregation-pipeline-data-size"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1binarySize  |  -  |  -  |  No  |  No  |  No  | 
|  \$1bsonSize  |  -  |  -  |  No  |  No  |  No  | 

### Operatori di data
<a name="mongo-apis-aggregation-pipeline-date"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1dataAggiungi](dateAdd.md)  |  No  |  No  |  Sì  |  Sì  |  Sì  | 
|  [\$1dateDiff](dateDiff.md)  |  -  |  -  |  Sì  |  Sì  |  No  | 
|  \$1dateFromParts  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1dateFromString](dateFromString.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1dateSottrai](dateSubtract.md)  |  No  |  No  |  Sì  |  Sì  |  Sì  | 
|  \$1dateToParts  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1dateToString](dateToString.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1dateTrunc](dateTrunc.md)  |  -  |  -  |  No  |  Sì  |  No  | 
|  [\$1dayOfMonth](dayOfMonth.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1dayOfWeek](dayOfWeek.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1dayOfYear](dayOfYear.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1hour](hour.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1 isoDayOf Settimana](isoDayOfWeek.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1isoWeek](isoWeek.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1isoWeekYear](isoWeekYear.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1millisecond](millisecond.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1minute](minute.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1month](month.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1second](second.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1week](week.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1year](year.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

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


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1literal](literal.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatore di unione
<a name="mongo-apis-aggregation-pipeline-merge"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1mergeObjects](mergeObjects.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 

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


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1naturale](natural.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatori su set
<a name="mongo-apis-aggregation-pipeline-set"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1allElementsTrue](allElementsTrue.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1anyElementTrue](anyElementTrue.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1setDifference](setDifference.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1setEquals](setEquals.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1setIntersection](setIntersection.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1setIsSubset](setIsSubset.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1setUnion](setUnion.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  \$1setWindowFields  |  No  |  No  |  No  |  No  |  No  | 

### Operatori sul palco
<a name="mongo-apis-aggregation-pipeline-stage"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1addFields](addFields.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1bucket](bucket.md)  |  No  |  No  |  No  |  Sì  |  No  | 
|  \$1bucketAuto  |  No  |  No  |  No  |  No  | 
|  [\$1changeStream](changeStream.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  No  | 
|  [\$1collStats](collStats.md)  |  No  |  Sì  |  Sì  |  Sì  |  No  | 
|  [\$1count](count.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1currentOp](currentOp.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  \$1facet  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1geoNear](geoNear.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  \$1graphLookup  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1group](group.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1indexStats](indexStats.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1limit](limit.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  \$1listLocalSessions  |  No  |  No  |  No  |  No  |  No  | 
|  \$1listSessions  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1lookup](lookup.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1match](match.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1unisci](merge.md)  |  -  |  -  |  No  |  Sì  |  No  | 
|  [\$1out](out.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  No  | 
|  \$1planCacheStats  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1project](project.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1redact](redact.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1replaceRoot](replaceRoot.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1sample](sample.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1set](set-stage.md)  |  -  |  -  |  No  |  Sì  |  No  | 
|  \$1setWindowFields  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1skip](skip.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1sort](sort.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  \$1sortByCount  |  No  |  No  |  No  |  No  |  No  | 
|  \$1unionWith  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1unset](unset-stage.md)  |  -  |  -  |  No  |  Sì  |  No  | 
|  [\$1unwind](unwind.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1sostituisci con](replaceWith.md)  |  No  |  No  |  No  |  Sì  |  No  | 
|  [\$1 Ricerca vettoriale](vectorSearch.md)  |  No  |  No  |  No  |  Sì  |  No  | 

### Operatori di stringa
<a name="mongo-apis-aggregation-pipeline-string"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1concat](concat.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1indexOfBytes](indexOfBytes.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1indexOfCP](indexOfCP.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1ltrim](ltrim.md)  |  No  |  Sì  |  Sì  |  Sì  |  No  | 
|  [\$1regexFind](regexFind.md)  |  -  |  -  |  Sì  |  Sì  |  No  | 
|  [\$1regexFindAll](regexFindAll.md)  |  -  |  -  |  Sì  |  Sì  |  No  | 
|  [\$1RegexMatch](regexMatch.md)  |  -  |  -  |  Sì  |  Sì  |  No  | 
|  [\$1 Sostituisci tutto](replaceAll.md)  |  -  |  -  |  Sì  |  Sì  |  No  | 
|  [\$1 Sostituisci uno](replaceOne.md)  |  -  |  -  |  Sì  |  Sì  |  No  | 
|  [\$1rtrim](rtrim.md)  |  No  |  Sì  |  Sì  |  Sì  |  No  | 
|  [\$1split](split.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1strcasecmp](strcasecmp.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1strLenBytes](strLenBytes.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1strLenCP](strLenCP.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1substr](substr.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1substrBytes](substrBytes.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1substrCP](substrCP.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1toLower](toLower.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1toUpper](toUpper.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1trim](trim.md)  |  No  |  Sì  |  Sì  |  Sì  |  No  | 

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


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1\$1CURRENT  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1\$1DESCEND](DESCEND.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1\$1KEEP](KEEP.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1\$1PRUNE](PRUNE.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  \$1\$1REMOVE  |  No  |  No  |  No  |  No  |  No  | 
|  [\$1RADICE](ROOT.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatore di ricerca testuale
<a name="mongo-apis-aggregation-pipeline-text-search"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1meta](meta-aggregation.md)  |  No  |  No  |  Sì  |  Sì  |  No  | 
|  [\$1ricerca](search.md)  |  No  |  No  |  Sì  |  Sì  |  No  | 

### Operatori di conversione dei tipi
<a name="mongo-apis-aggregation-pipeline-type"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1converti](convert.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  \$1isNumber  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1 a BOOL](toBool.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1 fino ad oggi](toDate.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1 a Decimal](toDecimal.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1 a Double](toDouble.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1 a INT](toInt.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1 a Long](toLong.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1toObjectId](toObjectId.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1toString](toString.md)  |  No  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatori variabili
<a name="mongo-apis-aggregation-pipeline-variable"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1let](let.md)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  [\$1map](map.md)  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 

### Operatori vari
<a name="mongo-apis-aggregation-pipeline-misc"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  \$1getField  |  -  |  -  |  No  |  No  |  No  | 
|  [\$1 rand](rand.md)  |  -  |  -  |  No  |  Sì  |  No  | 
|  \$1sampleRate  |  -  |  -  |  No  |  No  |  No  | 

## Tipi di dati
<a name="mongo-apis-data-types"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  Numero intero a 32 bit (int)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Numero intero a 64 bit (lungo)  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Array  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Dati binari  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Booleano  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Data  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  DBPointer  |  No  |  No  |  No  |  No  |  No  | 
|  DBRefs  |  No  |  No  |  No  |  No  |  No  | 
|  Decimal128  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Double  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  JavaScript  |  No  |  No  |  No  |  No  |  No  | 
|  JavaScript(con ambito)  |  No  |  No  |  No  |  No  |  No  | 
|  MaxKey  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  MinKey  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Null  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Oggetto  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  ObjectId  |  Sì  |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Espressione regolare  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Stringa  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Symbol  |  No  |  No  |  No  |  No  |  No  | 
|  Time stamp  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Undefined  |  No  |  No  |  No  |  No  |  No  | 

## Indici e proprietà degli indici
<a name="mongo-apis-index"></a>

**Topics**
+ [Indici](#mongo-apis-indexes)
+ [Proprietà dell'indice](#mongo-apis-index-properties)

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


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  2dsphere  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Indice 2d  |  No  |  No  |  No  |  No  |  No  | 
|  Indice composto  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Indice con hash  |  No  |  No  |  No  |  No  |  No  | 
|  Indice con più chiavi  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Indice con campo singolo  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Indice di testo  |  No  |  No  |  Sì  |  Sì  |  No  | 
|  Carattere jolly  |  No  |  No  |  No  |  No  |  No  | 

### Proprietà dell'indice
<a name="mongo-apis-index-properties"></a>


| Comando | 3.6 | 4.0 | 5.0 | 8.0 | Cluster elastico | 
| --- | --- | --- | --- | --- | --- | 
|  Contesto  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Senza distinzione tra maiuscole e minuscole  |  No  |  No  |  No  |  Sì  |  No  | 
|  Hidden  |  No  |  No  |  No  |  No  |  No  | 
|  Parziale  |  No  |  No  |  Sì  |  Sì  |  No  | 
|  Sparse  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Testo  |  No  |  No  |  Sì  |  Sì  |  No  | 
|  TTL  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Unique  |  Sì   |  Sì  |  Sì  |  Sì  |  Sì  | 
|  Vettore  |  No  |  No  |  Sì  |  Sì  |  No  | 

Per informazioni dettagliate su operatori MongoDB specifici, consulta i seguenti argomenti:
+ [Operatori di pipeline di aggregazione](mongo-apis-aggregation-pipeline-operators.md)
+ [Dati geospaziali](mongo-apis-geospatial-operators.md)
+ [Operatori di proiezione](#mongo-apis-projection-operators)
+ [Aggiorna operatori](mongo-apis-update-operators.md)

# Operatori di pipeline di aggregazione
<a name="mongo-apis-aggregation-pipeline-operators"></a>

Questa sezione fornisce informazioni dettagliate sugli operatori di pipeline di aggregazione supportati da Amazon DocumentDB.

**Topics**
+ [\$1\$1DESCEND](DESCEND.md)
+ [\$1\$1KEEP](KEEP.md)
+ [\$1\$1PRUNE](PRUNE.md)
+ [\$1RADICE](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)
+ [\$1converti](convert.md)
+ [\$1count](count.md)
+ [\$1currentOp](currentOp.md)
+ [\$1dataAggiungi](dateAdd.md)
+ [\$1dateDiff](dateDiff.md)
+ [\$1dateFromString](dateFromString.md)
+ [\$1dateSottrai](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 Settimana](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)
+ [\$1unisci](merge.md)
+ [\$1mergeObjects](mergeObjects.md)
+ [\$1millisecond](millisecond.md)
+ [\$1min](min.md)
+ [\$1minute](minute.md)
+ [\$1mod](mod.md)
+ [\$1month](month.md)
+ [\$1multiply](multiply.md)
+ [\$1naturale](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)
+ [\$1 rand](rand.md)
+ [\$1range](range.md)
+ [\$1redact](redact.md)
+ [\$1reduce](reduce.md)
+ [\$1regexFind](regexFind.md)
+ [\$1regexFindAll](regexFindAll.md)
+ [\$1RegexMatch](regexMatch.md)
+ [\$1 Sostituisci tutto](replaceAll.md)
+ [\$1 Sostituisci uno](replaceOne.md)
+ [\$1replaceRoot](replaceRoot.md)
+ [\$1sostituisci con](replaceWith.md)
+ [\$1reverseArray](reverseArray.md)
+ [\$1rtrim](rtrim.md)
+ [\$1sample](sample.md)
+ [\$1ricerca](search.md)
+ [\$1second](second.md)
+ [\$1set](set-stage.md)
+ [\$1setDifference](setDifference.md)
+ [\$1setEquals](setEquals.md)
+ [\$1setIntersection](setIntersection.md)
+ [\$1setIsSubset](setIsSubset.md)
+ [\$1setUnion](setUnion.md)
+ [\$1skip](skip.md)
+ [\$1slice](slice.md)
+ [\$1size](size.md)
+ [\$1sort](sort.md)
+ [\$1split](split.md)
+ [\$1sqrt](sqrt.md)
+ [\$1strLenBytes](strLenBytes.md)
+ [\$1strLenCP](strLenCP.md)
+ [\$1strcasecmp](strcasecmp.md)
+ [\$1substr](substr.md)
+ [\$1substrBytes](substrBytes.md)
+ [\$1substrCP](substrCP.md)
+ [\$1subtract](subtract.md)
+ [\$1sum](sum.md)
+ [\$1switch](switch.md)
+ [\$1 a BOOL](toBool.md)
+ [\$1 fino ad oggi](toDate.md)
+ [\$1 a Decimal](toDecimal.md)
+ [\$1 a Double](toDouble.md)
+ [\$1 a INT](toInt.md)
+ [\$1 a Long](toLong.md)
+ [\$1toLower](toLower.md)
+ [\$1toObjectId](toObjectId.md)
+ [\$1toString](toString.md)
+ [\$1toUpper](toUpper.md)
+ [\$1trim](trim.md)
+ [\$1type](type-aggregation.md)
+ [\$1unset](unset-stage.md)
+ [\$1unwind](unwind.md)
+ [\$1 Ricerca vettoriale](vectorSearch.md)
+ [\$1week](week.md)
+ [\$1year](year.md)
+ [\$1zip](zip.md)

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

L'`$$DESCEND`operatore in Amazon DocumentDB è uno speciale operatore di array posizionale utilizzato nella `$redact` fase di pipeline. Indica alla pipeline di aggregazione di scendere nel documento corrente ed elaborare tutti i campi, indipendentemente dal loro livello di nidificazione.

Quando lo `$redact` stage incontra l'`$$DESCEND`operatore, manterrà visibili tutti i campi del documento corrente e li elaborerà ulteriormente lungo la pipeline. Ciò è utile quando si desidera oscurare o eliminare selettivamente determinati campi in base a una condizione, mantenendo al contempo la struttura del documento.

**Parametri**

Nessuna.

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

In questo esempio, useremo lo `$redact` stage con l'`$$DESCEND`operatore per visualizzare selettivamente i documenti in cui il `code` campo è uguale a «Reg».

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="DESCEND-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$$DESCEND` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

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

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

redactPatients();
```

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

```
from pymongo import MongoClient

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

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

    print(result)
    client.close()

redact_patients()
```

------

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

La variabile di `$$KEEP` sistema viene utilizzata con lo `$redact` stage nella pipeline di aggregazione per mantenere invariato il documento o il campo corrente e includerlo nell'output.

**Parametri**

Nessuno

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

L'esempio seguente dimostra l'utilizzo di `$$KEEP` in una pipeline di aggregazione Amazon DocumentDB. I documenti vengono conservati solo se l'accesso è uguale a «pubblico», altrimenti vengono rimossi.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="KEEP-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$$KEEP` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

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

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

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

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

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

```
from pymongo import MongoClient

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

db = client.test
articles = db.articles

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

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

client.close()
```

------

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

La variabile di `$$PRUNE` sistema viene utilizzata con la `$redact` fase della pipeline di aggregazione per escludere documenti o livelli di documento incorporati dai risultati. Quando una condizione restituisce un risultato positivo`$$PRUNE`, il documento o il documento secondario corrente viene rimosso dall'output. In genere viene utilizzato con `$$DESCEND` (per conservare e scorrere il documento) o `$$KEEP` (per conservare il documento a tutti i livelli).

**Parametri**

Nessuna. La variabile di `$$PRUNE` sistema viene utilizzata senza parametri e deve essere utilizzata con. `$redact`

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

L'esempio seguente mostra come utilizzare `$$PRUNE` with per escludere gli utenti di età superiore `$redact` ai 30 anni dai risultati.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="PRUNE-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$$PRUNE` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

# \$1RADICE
<a name="ROOT"></a>

L'`$ROOT`operatore in Amazon DocumentDB viene utilizzato per fare riferimento all'intero documento di input all'interno di una pipeline di aggregazione. Consente di accedere e manipolare l'intero documento, inclusi tutti i campi e le strutture annidati.

**Parametri**

Nessuno

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

Questo esempio dimostra l'utilizzo `$ROOT` per creare un registro di controllo che acquisisca il documento originale completo insieme ai metadati relativi a quando è stato elaborato.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="ROOT-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$ROOT` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$abs`operatore in Amazon DocumentDB restituisce il valore assoluto di un numero. Può essere utilizzato nella pipeline di aggregazione per eseguire operazioni matematiche su campi numerici.

**Parametri**
+ `number`: L'espressione numerica per la quale verrà restituito il valore assoluto.

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

Questo esempio dimostra l'utilizzo dell'`$abs`operatore per trovare il valore assoluto di un campo numerico.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="abs-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$abs` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$add`operatore in Amazon DocumentDB viene utilizzato per sommare numeri o date. Può essere utilizzato per eseguire operazioni aritmetiche su campi numerici o per eseguire operazioni aritmetiche di date aggiungendo un numero di unità di tempo a un campo di data.

**Parametri**
+ `expression1`: Il primo numero o data da aggiungere.
+ `expression2`: Il secondo numero o data da aggiungere.
+ `expression3`: (opzionale) Numeri o date aggiuntivi da aggiungere.

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

L'esempio seguente mostra come utilizzare l'`$add`operatore per sommare due numeri.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

In questo esempio, l'`$add`operatore viene utilizzato per aggiungere i valori dei `b` campi `a` e per ogni documento e memorizzare il risultato nel `sum` campo.

## Esempi di codice
<a name="add-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$add` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$addToSet` aggregazione restituisce una matrice di valori univoci da un'espressione specificata per ogni gruppo. Viene utilizzato all'interno dello `$group` stage per accumulare valori distinti, eliminando automaticamente i duplicati.

**Parametri**
+ `expression`: L'espressione da valutare per ogni documento del gruppo.

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

L'esempio seguente dimostra l'utilizzo dell'`$addToSet`operatore per raccogliere città uniche in cui sono stati effettuati gli ordini per ogni cliente.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="addToSet-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$addToSet` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

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

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

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

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

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

example();
```

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

```
from pymongo import MongoClient

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

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

    print(result)
    client.close()

example()
```

------

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

La `$addFields` fase della pipeline di aggregazione di Amazon DocumentDB consente di aggiungere nuovi campi calcolati ai documenti. Questo può essere utile per aggiungere dati derivati o trasformati ai documenti.

**Parametri**
+ `newField`: nome del nuovo campo da aggiungere.
+ `expression`: espressione che si risolve nel valore del nuovo campo.

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

L'esempio seguente mostra come `$addFields` aggiungere un nuovo campo `TotalInventory` che calcola l'inventario totale in base ai campi and. `Inventory.OnHand` `Inventory.OrderQnty`

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="addFields-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$addFields` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 4.0

L'`$allElementsTrue`operatore viene utilizzato per verificare se tutti gli elementi di un array restituiscono un valore vero.

**Parametri**
+ `expression`: espressione che restituisce un array.

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

L'esempio seguente dimostra l'utilizzo di `$allElementsTrue` per verificare se tutti gli elementi di un array sono veri.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

In questo esempio, la query verifica se tutti gli elementi dell'`scores`array sono maggiori di 0. Il documento con `&quot;name&quot;: &quot;Jane&quot;` è escluso perché l'`scores`array contiene uno 0, che è un valore falso.

## Esempi di codice
<a name="allElementsTrue-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$allElementsTrue` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$and` aggregazione valuta più espressioni e restituisce `true` solo se tutte le espressioni restituiscono a. `true` Se un'espressione lo è`false`, restituisce. `false`

**Parametri**
+ `expressions`: Una serie di espressioni da valutare.

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

L'esempio seguente dimostra l'utilizzo `$and` dell'operatore per verificare se i prodotti soddisfano più criteri.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="and-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$and` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

Novità dalla versione 4.0

L'`$anyElementTrue`operatore viene utilizzato per determinare se un elemento di un array è vero.

**Parametri**
+ `field`: un campo di matrice da valutare.

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

L'esempio seguente dimostra l'utilizzo di `$anyElementTrue` per verificare se un elemento in un array è vero.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="anyElementTrue-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$anyElementTrue` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$arrayElemAt`operatore in Amazon DocumentDB consente di recuperare un elemento da un array in base alla sua posizione di indice. Ciò è particolarmente utile quando è necessario accedere a un elemento specifico all'interno di un campo di matrice nei documenti.

**Parametri**
+ `array`: L'array di input da cui deve essere recuperato un elemento.
+ `index`: la posizione dell'indice a base zero dell'elemento da recuperare. Questo valore deve essere un numero intero non negativo.

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

In questo esempio, dimostreremo come utilizzare l'`$arrayElemAt`operatore per recuperare elementi specifici dall'`flight_miles`array della raccolta. `miles`

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

In questo esempio, utilizziamo l'`$arrayElemAt`operatore per recuperare il primo e l'ultimo elemento dell'`flight_miles`array per ogni documento.

## Esempi di codice
<a name="arrayElemAt-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$arrayElemAt` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$arrayToObject`operatore in Amazon DocumentDB è l'opposto dell'`$objectToArray`operatore. Prende una serie di documenti di coppia chiave-valore e li converte in un unico documento. Ciò è particolarmente utile quando è necessario riconvertire una serie di coppie chiave-valore in una struttura di oggetto o documento.

**Parametri**
+ `array expression`: espressione che si risolve in un array. Gli elementi dell'array devono essere documenti con due campi: `k` (la chiave) e `v` (il valore).

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

L'esempio seguente mostra come `$arrayToObject` riconvertire una matrice di coppie chiave-valore in un documento.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

In questo esempio, l'`$objectToArray`operatore viene utilizzato per convertire l'`inventory`oggetto in una matrice di coppie chiave-valore. L'`$arrayToObject`operatore viene quindi utilizzato per riconvertire l'array in un documento, ripristinando la struttura originale dell'oggetto.

## Esempi di codice
<a name="arrayToObject-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$arrayToObject` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$avg` aggregazione in Amazon DocumentDB calcola il valore medio dell'espressione specificata tra i documenti che vengono inseriti nella fase. Questo operatore è utile per calcolare la media di un campo o di un'espressione numerica in un insieme di documenti.

**Parametri**
+ `expression`: L'espressione da utilizzare per calcolare la media. Può essere un percorso di campo (ad esempio`"$field"`) o un'espressione (ad esempio`{ $multiply: ["$field1", "$field2"] }`).

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

L'esempio seguente mostra come utilizzare l'`$avg`operatore per calcolare il punteggio medio su una serie di documenti degli studenti.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="avg-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$avg` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 8.0

Non supportato dal cluster Elastic.

La fase di `$bucket` aggregazione in Amazon DocumentDB consente di raggruppare i documenti di input in bucket in base a un'espressione e ai limiti del bucket specificati. Ciò può essere utile per analizzare dati che rientrano in determinati intervalli di valori o categorie.

**Parametri**
+ `groupBy`(obbligatorio): L'espressione che specifica il valore in base al quale raggruppare.
+ `boundaries`(obbligatorio): Una matrice di valori doppi che definiscono i limiti del bucket. I documenti vengono assegnati ai bucket in base al valore dell'`groupBy`espressione che rientra nei limiti specificati.
+ `default`(opzionale): Un valore letterale che viene emesso per i documenti il cui valore di `groupBy` espressione non rientra in nessuno dei limiti specificati.
+ `output`(opzionale): Un oggetto che specifica le informazioni da restituire per ogni bucket. È possibile utilizzare operatori di accumulazione come`$sum`, `$avg``$min`, e `$max` per calcolare aggregazioni per ogni bucket.

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

L'esempio seguente mostra come utilizzare lo `$bucket` stage per raggruppare i dati di vendita per fascia di prezzo.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="bucket-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$bucket` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 4.0

L'`$ceil`operatore in Amazon DocumentDB, come in MongoDB, arrotonda un numero al numero intero più vicino. Ciò è utile quando è necessario eseguire operazioni matematiche su campi numerici e garantire che il risultato sia un numero intero.

**Parametri**
+ `expression`: L'espressione numerica da arrotondare.

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

Questo esempio dimostra come utilizzare l'`$ceil`operatore per arrotondare un campo numerico.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="ceil-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$ceil` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Non supportato dal cluster Elastic.

La fase di `$changeStream` aggregazione apre un cursore del flusso di modifiche per monitorare le modifiche in tempo reale a una raccolta. Restituisce i documenti degli eventi di modifica quando si verificano operazioni di inserimento, aggiornamento, sostituzione o eliminazione.

**Parametri**
+ `fullDocument`: specifica se restituire il documento completo per le operazioni di aggiornamento. Le opzioni sono `default` o `updateLookup`.
+ `resumeAfter`: facoltativo. Il token Resume proseguirà da un punto specifico del flusso di modifiche.
+ `startAtOperationTime`: facoltativo. Timestamp da cui iniziare il flusso di modifiche.
+ `allChangesForCluster`: facoltativo. Valore booleano. Quando`true`, controlla tutte le modifiche nel cluster (per il database di amministrazione). Quando `false` (impostazione predefinita), controlla solo la raccolta specificata.

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

L'esempio seguente dimostra l'utilizzo dello `$changeStream` stage per monitorare le modifiche a una raccolta.

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="changeStream-code"></a>

Per visualizzare un esempio di codice per l'utilizzo della fase di `$changeStream` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$cmp`operatore in Amazon DocumentDB viene utilizzato per confrontare due valori e restituire un valore intero che indica il loro ordine relativo. È un operatore di confronto che confronta due espressioni e restituisce un valore intero di -1, 0 o 1, a seconda che il primo valore sia rispettivamente minore, uguale o maggiore del secondo valore.

**Parametri**
+ `expression1`: la prima espressione da confrontare.
+ `expression2`: La seconda espressione da confrontare.

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

L'esempio seguente dimostra l'utilizzo dell'`$cmp`operatore per confrontare due valori numerici.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

In questo esempio, l'`$cmp`operatore confronta i `value2` campi `value1` e di ogni documento. Il risultato è:

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

## Esempi di codice
<a name="cmp-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$cmp` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

Ecco un esempio di utilizzo dell'`$cmp`operatore in un'applicazione Node.js con il `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 ]

Ecco un esempio di utilizzo dell'`$cmp`operatore in un'applicazione Python con il `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()
```

L'output di entrambi gli esempi Node.js e Python sarà lo stesso dell'esempio di 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>

Novità dalla versione 4.0

La fase di `$collStats` aggregazione in Amazon DocumentDB fornisce statistiche sulla raccolta specificata, in modo simile al comando `db.collection.stats()` nella shell MongoDB. Questa fase può essere utilizzata per recuperare informazioni sulla raccolta, come il numero di documenti, la dimensione totale della raccolta e vari parametri prestazionali.

**Parametri**
+ `latencyStats`: (opzionale) Un documento che specifica le opzioni per la raccolta delle statistiche sulla latenza. Questo parametro non è supportato in Amazon DocumentDB.
+ `recordStats`: (opzionale) Un documento che specifica le opzioni per la raccolta di statistiche sui record. Questo parametro non è supportato in Amazon DocumentDB.
+ `queryExecStats`: (opzionale) Un documento che specifica le opzioni per la raccolta delle statistiche sull'esecuzione delle query. Questo parametro non è supportato in Amazon DocumentDB.

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

L'esempio seguente mostra come utilizzare la fase di `$collStats` aggregazione per recuperare statistiche su una raccolta denominata nel database. `test` `db`

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="collStats-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$collStats` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

Ecco un esempio di come utilizzare la fase di `$collStats` aggregazione in un'applicazione Node.js utilizzando il driver ufficiale 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 ]

Ecco un esempio di come utilizzare la fase di `$collStats` aggregazione in un'applicazione Python utilizzando PyMongo il 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>

L'operatore di `$concat` aggregazione in Amazon DocumentDB concatena (o combina) più stringhe in un documento per produrre una singola stringa che può essere restituita all'applicazione. Ciò riduce il lavoro svolto nell'applicazione, poiché la manipolazione delle stringhe viene eseguita a livello di database.

**Parametri**
+ `expression1`: la prima stringa da concatenare.
+ `expression2`: La seconda stringa da concatenare.
+ `...`: stringhe aggiuntive da concatenare (opzionale).

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

In questo esempio, concateniamo il nome e il cognome degli utenti per produrre il nome completo di ogni persona.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="concat-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$concat` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$concatArrays` aggregazione in Amazon DocumentDB viene utilizzato per concatenare due o più array in un unico array. Questo può essere utile quando è necessario combinare più array di dati in un unico array per ulteriori elaborazioni o analisi.

**Parametri**
+ `array1`: il primo array da concatenare.
+ `array2`: Il secondo array da concatenare.
+ `[array3, ...]`: (opzionale) Matrici aggiuntive da concatenare.

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

L'esempio seguente mostra come utilizzare l'`$concatArrays`operatore per combinare due array in un unico array.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="concatArrays-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$concatArrays` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$cond`operatore in Amazon DocumentDB viene utilizzato per valutare un'espressione condizionale e restituire una delle due possibili espressioni di risultato.

**Parametri**
+ `if`: L'espressione booleana da valutare.
+ `then`: L'espressione da restituire se l'`if`espressione è vera.
+ `else`: L'espressione da restituire se l'`if`espressione è falsa.

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

L'esempio seguente dimostra l'uso dell'`$cond`operatore per restituire un valore basato sull'età di una persona.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="cond-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$cond` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

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

Nuovo dalla versione 4.0

L'`$convert`operatore in Amazon DocumentDB viene utilizzato per convertire un valore da un tipo di dati a un altro. Questo operatore è utile quando è necessario eseguire operazioni su dati di diverso tipo, come convertire una stringa in un numero o una data in un timestamp.

**Parametri**
+ `to`: il tipo di dati di destinazione in cui convertire il valore. I valori supportati sono `"string"`, `"double"`, `"long"`, `"int"`, `"date"` e `"boolean"`.
+ `from`: il tipo di dati corrente del valore. Se non specificato, Amazon DocumentDB tenterà di rilevare automaticamente il tipo di dati.
+ `onError`: (opzionale) Il valore da restituire se la conversione fallisce. Può essere un valore specifico o uno dei seguenti valori speciali:`"null"`,`"zerofill"`, o`"error"`.
+ `onNull`: (opzionale) Il valore da restituire se il valore di input è`null`. Può essere un valore specifico o uno dei seguenti valori speciali:`"null"`,`"zerofill"`, o`"error"`.

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

L'esempio seguente mostra la conversione di un valore di stringa in una data utilizzando l'operatore. `$convert`

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="convert-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$convert` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

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

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

example();
```

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

```
from pymongo import MongoClient

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

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

    print(results)
    client.close()

example()
```

------

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

La fase di `$count` aggregazione in Amazon DocumentDB viene utilizzata per contare il numero di documenti che entrano nella fase. Viene spesso utilizzata come fase finale di una pipeline di aggregazione per restituire il numero totale di documenti corrispondenti alle fasi precedenti.

**Parametri**
+ `field`: Il campo da contare. Questo parametro è facoltativo e, se non viene fornito, la fase conterà il numero totale di documenti di input.

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

L'esempio seguente mostra come utilizzare lo `$count` stage per ottenere il numero totale di documenti in una raccolta.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

L'esempio aggrega la `users` raccolta e utilizza lo `$count` stage per contare il numero totale di documenti.

## Esempi di codice
<a name="count-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$count` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

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

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

  await client.close();
}

countDocuments();
```

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

```
from pymongo import MongoClient

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

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

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

    client.close()

count_documents()
```

------

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

La fase `$currentOp` di aggregazione restituisce informazioni sulle operazioni attualmente in esecuzione nel database. Questa fase è utile per monitorare le interrogazioni e le operazioni attive in una pipeline di aggregazione.

**Parametri**
+ `allUsers`(opzionale): se impostato su`true`, restituisce le operazioni per tutti gli utenti. Il valore predefinito è “`false`”.
+ `idleConnections`(opzionale): se impostato su`true`, include le connessioni inattive. Il valore predefinito è “`false`”.
+ `idleCursors`(opzionale): Se impostato su`true`, include informazioni sui cursori inattivi. Il valore predefinito è “`false`”.
+ `idleSessions`(opzionale): se impostato su`true`, include informazioni sulle sessioni inattive. Il valore predefinito è “`true`”.
+ `localOps`(opzionale): se impostato su`true`, include le operazioni locali. Il valore predefinito è “`false`”.

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

L'esempio seguente dimostra l'utilizzo della fase di `$currentOp` aggregazione per recuperare informazioni sulle operazioni di lettura attive.

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="currentOp-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$currentOp` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

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

Nuovo dalla versione 5.0

L'operatore di `$dateAdd` aggregazione in Amazon DocumentDB consente di aggiungere una durata a un valore di data e ora.

**Parametri**
+ `date`: Un valore di data e ora a cui aggiungere una durata.
+ `duration`: La durata da aggiungere al `date` valore. Può essere specificato come oggetto con le chiavi per`years`,`months`, `weeks``days`,`hours`,`minutes`, e`seconds`.
+ `timezone`: (opzionale) Il fuso orario da utilizzare quando si esegue l'aggiunta della data. Se non specificato, viene utilizzato il fuso orario predefinito del cluster Amazon DocumentDB.

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

L'esempio seguente mostra come utilizzare l'`$dateAdd`operatore per aggiungere 2 giorni e 12 ore a una data.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="dateAdd-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$dateAdd` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Nuovo dalla versione 5.0

Non supportato dal cluster Elastic.

L'operatore `$dateDiff` di aggregazione calcola la differenza tra due date in unità specificate. Restituisce il numero di limiti di unità superati tra le date di inizio e di fine.

**Parametri**
+ `startDate`: L'espressione della data di inizio.
+ `endDate`: L'espressione della data di fine.
+ `unit`: L'unità di tempo per la differenza. Le unità supportate sono `year` `quarter``month`,`week`,`day`,`hour`,`minute`,`second`, e`millisecond`.

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

L'esempio seguente mostra come utilizzare l'`$dateDiff`operatore per calcolare il numero di giorni tra l'immissione dell'ordine e la consegna.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="dateDiff-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$dateDiff` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$dateFromString` aggregazione in Amazon DocumentDB consente di convertire una stringa data-ora in un oggetto data. Ciò è utile quando i dati sono archiviati come stringhe, ma è necessario eseguire operazioni basate sulla data sui dati.

**Parametri**
+ `dateString`: Una stringa che rappresenta una data e un'ora.
+ `format`: (opzionale) Una stringa che specifica il formato di. `dateString` Se non viene fornito, Amazon DocumentDB tenterà di analizzare la stringa nel formato ISO-8601.
+ `timezone`: (opzionale) Una stringa che specifica il fuso orario. Se non viene fornito, Amazon DocumentDB utilizzerà il fuso orario del server.
+ `onError`: (opzionale) Speciifica l'azione da intraprendere se la conversione fallisce. I valori possibili sono `'error'` (impostazione predefinita, che genera un errore), `'null'` (restituisce`null`) o `'replace'` (sostituisce il valore con la stringa di sostituzione specificata nell'`onErrorMessage`opzione).
+ `onErrorMessage`: (opzionale) Se `onError` è impostata su`'replace'`, questa opzione specifica la stringa sostitutiva.

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

L'esempio seguente mostra come utilizzare per `$dateFromString` convertire una stringa di data in un oggetto data in Amazon DocumentDB.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="dateFromString-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$dateFromString` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

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

Nuovo dalla versione 5.0

L'operatore di `$dateSubtract` aggregazione in Amazon DocumentDB consente di sottrarre una durata specificata da un valore di data.

**Parametri**
+ `date`: espressione di data che si risolve in una data o un timestamp.
+ `subtrahend`: espressione di durata che specifica la quantità di tempo da sottrarre dall'espressione. `date`
+ `unit`: Una stringa che specifica l'unità di tempo per l'espressione. `subtrahend` Le unità supportate sono «anno», «trimestre», «mese», «settimana», «giorno», «ora», «minuto», «secondo» e «millisecondo».

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

L'esempio seguente mostra come utilizzare l'`$dateSubtract`operatore per calcolare la data di un anno fa dalla data corrente.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="dateSubtract-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$dateSubtract` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$dateToString` aggregazione in Amazon DocumentDB viene utilizzato per convertire un valore di data o timestamp in una rappresentazione di stringa. Ciò è utile quando è necessario formattare la data e l'ora in un modo specifico per la visualizzazione o l'ulteriore elaborazione.

**Parametri**
+ `date`: Il valore della data o del timestamp da convertire in una stringa.
+ `format`: Una stringa che specifica il formato in cui deve essere rappresentata la data. La stringa di formato può includere diversi specificatori di formato, ad esempio `%Y` per l'anno a quattro cifre, per il mese a due cifre, `%m` per il giorno del mese a due cifre, `%d` ecc.
+ `timezone`: (opzionale) Il fuso orario da utilizzare per la conversione. Se non specificato, viene utilizzato il fuso orario del server che ospita il cluster Amazon DocumentDB.
+ `onNull`: (opzionale) Il valore da restituire se il `date` parametro è`null`.

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

L'esempio seguente dimostra l'utilizzo dell'`$dateToString`operatore per formattare il `logDate` campo della raccolta. `missionLog`

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="dateToString-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$dateToString` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

Ecco un esempio di utilizzo dell'`$dateToString`operatore in un'applicazione 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 ]

Ecco un esempio di utilizzo dell'`$dateToString`operatore in un'applicazione 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>

Nuovo dalla versione 8.0

Non supportato dal cluster Elastic.

L'operatore di `$dateTrunc` aggregazione in Amazon DocumentDB tronca una data in un'unità specificata.

**Parametri**
+ `date`: espressione di data che si risolve in una data o un timestamp.
+ `unit`: Una stringa che specifica l'unità di tempo per l'espressione sottraend. Le unità supportate sono`year`,`quarter`,`month`,,`week`, `day``hour`, `minute` e. `second` `millisecond`

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

L'esempio seguente mostra come utilizzare l'`$dateTrunc`operatore per troncare una data all'ora.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="dateTrunc-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$dateTrunc` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$dayOfMonth` aggregazione in Amazon DocumentDB recupera il giorno del mese (da 1 a 31) per una determinata data. Questo operatore è utile per raggruppare, filtrare o estrarre il giorno del mese dai campi della data nei documenti.

**Parametri**
+ `date expression`: L'espressione della data può essere un campo data dal documento, un oggetto data o una stringa di data.

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

Questo esempio dimostra come utilizzare l'`$dayOfMonth`operatore per estrarre il giorno del mese da un campo data nel documento.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="dayOfMonth-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$dayOfMonth` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$dayOfWeek`operatore in Amazon DocumentDB estrae il giorno della settimana da un determinato campo data. Restituisce il giorno della settimana come numero compreso tra 1 (domenica) e 7 (sabato), che è lo stesso comportamento di MongoDB.

**Parametri**
+ `date field`: Il campo della data da cui estrarre il giorno della settimana.

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

Questo esempio dimostra come utilizzare l'`$dayOfWeek`operatore per estrarre il giorno della settimana dal `date` campo della raccolta. `weather`

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="dayOfWeek-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$dayOfWeek` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$dayOfYear`operatore in Amazon DocumentDB restituisce il giorno dell'anno per una data con un numero compreso tra 1 e 366 (365 negli anni non bisestili).

**Parametri**
+ `expression`: Il campo o l'espressione della data da cui estrarre il giorno dell'anno.

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

Questo esempio dimostra come utilizzare l'`$dayOfYear`operatore per estrarre il giorno dell'anno da un campo data in una raccolta Amazon DocumentDB.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="dayOfYear-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$dayOfYear` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$divide`operatore nella pipeline di aggregazione di Amazon DocumentDB viene utilizzato per dividere un numero per un altro. È un operatore utile per eseguire operazioni matematiche su campi numerici all'interno dei documenti.

**Parametri**
+ `numerator`: Il dividendo o il numero da dividere.
+ `denominator`: Il divisore o il numero per cui dividere.

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

Questo esempio dimostra come utilizzare l'`$divide`operatore per calcolare la tariffa oraria per i dipendenti in base al loro stipendio annuale e al numero di ore lavorative all'anno.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="divide-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$divide` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$eq` aggregazione confronta due valori e restituisce `true` se sono uguali, altrimenti restituisce. `false`

**Parametri**
+ `expression1`: Il primo valore da confrontare.
+ `expression2`: Il secondo valore da confrontare.

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

L'esempio seguente dimostra l'utilizzo `$eq` dell'operatore per verificare se le quantità di prodotto corrispondono ai valori target.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="eq-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$eq` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

Novità dalla versione 4.0

L'`$exp`operatore in Amazon DocumentDB consente di elevare la costante e a un determinato numero.

**Parametri**
+ `expression`: L'espressione da valutare. Può trattarsi di qualsiasi espressione di aggregazione valida, inclusi riferimenti di campo, operazioni aritmetiche e altre fasi di aggregazione.

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

L'esempio seguente dimostra l'uso dell'`$exp`operatore per trovare tutti i documenti in cui il `quantity` campo è maggiore del campo. `price`

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="exp-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$exp` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$filter`operatore in Amazon DocumentDB viene utilizzato per applicare un'espressione di filtro a ciascun elemento di un array e restituire un array contenente solo gli elementi che corrispondono alla condizione specificata. Questo operatore è utile quando è necessario eseguire operazioni di filtraggio complesse sui campi di matrice all'interno dei documenti.

**Parametri**
+ `input`: Il campo dell'array da filtrare.
+ `as`: il nome della variabile da utilizzare per ogni elemento dell'`input`array all'interno dell'`cond`espressione.
+ `cond`: L'espressione booleana che determina se un determinato elemento deve essere incluso nell'array di output.

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

L'esempio seguente dimostra come utilizzare l'`$filter`operatore per proiettare il cliente di ogni ordine e creare un nuovo campo di matrice PaidItems contenente solo gli articoli dell'array items il cui prezzo è maggiore di 15. In sostanza, filtra gli articoli di ciascun ordine per includere solo i prodotti che costano più di 15€.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="filter-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$filter` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 5.0.

Non supportato dal cluster Elastic.

L'`$first`operatore in Amazon DocumentDB restituisce il primo documento da un insieme raggruppato di documenti. Viene comunemente utilizzato nelle pipeline di aggregazione per recuperare il primo documento che corrisponde a una condizione specifica.

**Parametri**
+ `expression`: L'espressione da restituire come primo valore in ogni gruppo.

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

L'esempio seguente dimostra l'uso dell'`$first`operatore per recuperare il valore del primo elemento rilevato per ogni categoria durante l'aggregazione.

Nota: `$first` restituisce il primo documento in base all'ordine corrente dei documenti nella pipeline. Per garantire un ordine specifico (ad esempio, per data, prezzo, ecc.), è necessario utilizzare una `$sort` fase prima della `$group` fase.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="first-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$first` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 4.0.

L'`$floor`operatore in Amazon DocumentDB restituisce il numero intero più grande inferiore o uguale al numero specificato. Questo operatore è utile per arrotondare i valori numerici.

**Parametri**
+ `expression`: L'espressione numerica da arrotondare per difetto.

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

L'esempio seguente dimostra l'uso dell'`$floor`operatore per arrotondare un valore decimale al numero intero più vicino.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="floor-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$floor` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

  try {
    await client.connect();

    const db = client.db('test');
    const collection = db.collection('numbers');

    const result = await collection.aggregate([
      { $project: { _id: 0, floored: { $floor: "$value" } } }
    ]).toArray();

    console.log(result);

  } catch (error) {
    console.error('Error:', error);
  } finally {
    await client.close();
  }
}

example();
```

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

```
from pymongo import MongoClient
from pprint import pprint

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

        db = client.test
        collection = db.numbers

        result = list(collection.aggregate([
            { '$project': { '_id': 0, 'floored': { '$floor': '$value' }}}
        ]))

        pprint(result)

    except Exception as e:
        print(f"An error occurred: {e}")

    finally:
        if client:
            client.close()

example()
```

------

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

La fase di `$geoNear` aggregazione restituisce i documenti in ordine di prossimità a un punto specificato. Calcola la distanza dal punto e include la distanza nei documenti di output.

**Parametri**
+ `near`: il punto da cui calcolare le distanze, specificato come coordinate GeoJSON o legacy.
+ `distanceField`: Il nome del campo per memorizzare la distanza calcolata.
+ `spherical`: valore booleano che indica se utilizzare la geometria sferica (obbligatorio per i punti GeoJSON).
+ `maxDistance`: facoltativo. Distanza massima dal punto centrale.
+ `minDistance`: facoltativo. Distanza minima dal punto centrale.
+ `query`: facoltativo. Criteri di filtro aggiuntivi da applicare.
+ `limit`: facoltativo. Numero massimo di documenti da restituire.
+ `key`: facoltativo. Campo da utilizzare per l'interrogazione geospaziale quando esistono più indici geospaziali.

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

L'esempio seguente dimostra l'utilizzo `$geoNear` dello stage per trovare i negozi più vicini a una determinata posizione.

**Create documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="geoNear-code"></a>

Per visualizzare un esempio di codice per l'utilizzo della fase di `$geoNear` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

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

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

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

  const result = await collection.aggregate([
    {
      $geoNear: {
        near: { type: "Point", coordinates: [-122.4, 37.8] },
        distanceField: "distance",
        spherical: true
      }
    }
  ]).toArray();

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

example();
```

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

```
from pymongo import MongoClient

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

    result = list(collection.aggregate([
        {
            '$geoNear': {
                'near': { 'type': 'Point', 'coordinates': [-122.4, 37.8] },
                'distanceField': 'distance',
                'spherical': True
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

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

La fase di `$group` aggregazione in Amazon DocumentDB consente di raggruppare i documenti in base a un'espressione specificata ed eseguire varie operazioni cumulative sui dati raggruppati. Ciò può essere utile per attività come il calcolo di totali, medie o altre statistiche basate sui dati raggruppati.

**Parametri**
+ `_id`: specifica l'espressione in base alla quale devono essere raggruppati i documenti di input. Può essere un nome di campo, un'espressione calcolata o una combinazione di entrambi.
+ `accumulator expressions`: (opzionale) Una o più espressioni di accumulazione da applicare ai dati raggruppati. Queste espressioni utilizzano gli operatori di accumulazione sopra menzionati.

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

L'esempio seguente raggruppa i clienti per città e calcola l'importo totale dell'ordine per ogni città.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="group-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$group` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$gt` aggregazione confronta due valori e restituisce `true` se il primo valore è maggiore del secondo, altrimenti restituisce. `false`

**Parametri**
+ `expression1`: il primo valore da confrontare.
+ `expression2`: Il secondo valore da confrontare.

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

L'esempio seguente dimostra l'utilizzo `$gt` dell'operatore per identificare i prodotti che superano una soglia di prezzo.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="gt-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$gt` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'operatore di `$gte` aggregazione confronta due valori e restituisce `true` se il primo valore è maggiore o uguale al secondo, altrimenti restituisce. `false`

**Parametri**
+ `expression1`: Il primo valore da confrontare.
+ `expression2`: Il secondo valore da confrontare.

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

L'esempio seguente dimostra l'utilizzo `$gte` dell'operatore per verificare se gli studenti hanno superato un esame.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="gte-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$gte` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$hour`operatore estrae il componente orario da un campo di data o timestamp.

**Parametri**
+ `dateExpression`: la data alla quale viene applicato l'operatore. Questo deve risolversi in una data BSON valida (ad esempio, un campo come \$1createdAt o una data letterale).

Un parametro può anche essere specificato come documento nel seguente formato:

\$1data:`&lt;dateExpression&gt;`, fuso orario:\$1 `&lt;timezoneExpression&gt;`

Ciò consente di applicare operazioni di data in base al fuso orario.

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

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

L'esempio seguente mostra come utilizzare l'`$hour`operatore per estrarre il componente ora da un campo data e raggruppare i dati di conseguenza.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

Questa query raggruppa gli eventi in base alla componente oraria del `timestamp` campo e conta il numero di eventi per ogni ora.

## Esempi di codice
<a name="hour-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$hour` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$ifNull`operatore viene utilizzato per restituire un valore specificato se l'espressione di input restituisce null o undefined. Questo operatore può essere utile negli scenari in cui si desidera fornire un valore predefinito o gestire casi. null/undefined 

**Parametri**
+ `expression`: L'espressione da valutare.
+ `replacement`: Il valore da restituire se `<expression>` restituisce null o undefined.

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

L'esempio seguente dimostra l'utilizzo dell'`$ifNull`operatore per fornire un valore predefinito quando il `name` campo è nullo o non definito.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="ifNull-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$ifNull` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore `$in` di aggregazione verifica se un valore specificato esiste all'interno di un array. Restituisce `true` se il valore viene trovato nell'array e in `false` altro modo.

**Parametri**
+ `value`: Il valore da cercare.
+ `array`: L'array in cui cercare.

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

L'esempio seguente dimostra l'utilizzo dell'`$in`operatore per verificare se esiste una competenza specifica nel set di competenze di ciascun dipendente.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="in-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$in` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$indexOfArray`operatore in Amazon DocumentDB viene utilizzato per trovare l'indice della prima occorrenza di un elemento specificato in un array. Questo operatore restituisce la posizione dell'indice a base zero del primo elemento dell'array che corrisponde al valore specificato. Se il valore non viene trovato, restituisce -1.

**Parametri**
+ `array`: L'array da cercare.
+ `value`: Il valore da cercare nell'array.
+ `start`: (opzionale) La posizione nell'array da cui iniziare la ricerca. Il valore predefinito è 0.

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

L'esempio seguente mostra come utilizzare l'indexOfArray operatore \$1 per trovare l'indice della prima occorrenza dell'elemento «mango» nell'array «fruits» per ogni documento.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="indexOfArray-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$indexOfArray` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'indexOfBytes operatore \$1 in Amazon DocumentDB viene utilizzato per trovare l'indice iniziale di una sottostringa all'interno di una stringa, in base alle posizioni in byte dei caratteri. Questo può essere utile quando si lavora con dati di testo che possono contenere caratteri multibyte, come quelli presenti negli script non latini.

**Parametri**
+ `string`: La stringa di input da cercare.
+ `substring`: La sottostringa da cercare all'interno della stringa di input.
+ `[<start>]`: (opzionale) La posizione iniziale (in base zero) della ricerca. Se non viene specificato, la ricerca inizia all'inizio della stringa.

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

L'esempio seguente dimostra l'uso di `$indexOfBytes` per trovare l'indice del primo trattino in un insieme di stringhe che rappresentano le posizioni delle scrivanie.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="indexOfBytes-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$indexOfBytes` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$indexOfCP`operatore in Amazon DocumentDB viene utilizzato per trovare l'indice, in punti di codice (CP), della prima occorrenza di una sottostringa specificata all'interno di un'espressione stringa. Questo può essere utile quando si analizza ed estrae il contenuto dai campi stringa.

**Parametri**
+ `string expression`: La stringa da cercare.
+ `substring`: La sottostringa da cercare.
+ `[<start>]`: (opzionale) La posizione in cui iniziare la ricerca (indice a base zero). Il valore predefinito è 0.

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

In questo esempio, utilizziamo l'`$indexOfCP`operatore per trovare l'indice della prima occorrenza del carattere trattino, nel campo Desk di ogni documento.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="indexOfCP-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$indexOfCP` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

  const result = await collection.aggregate([
    { $project: { stateLocation: { $indexOfCP: [ "$Desk", "-"] } } }
  ]).toArray();

  console.log(result);

  await client.close();
}

main();
```

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

```
from pymongo import MongoClient

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

result = list(collection.aggregate([
    { '$project': { 'stateLocation': { '$indexOfCP': [ '$Desk', '-' ] } } }
]))

print(result)

client.close()
```

------

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

La fase di `$indexStats` aggregazione in Amazon DocumentDB fornisce informazioni sull'utilizzo degli indici all'interno di una raccolta. Questo operatore ti consente di monitorare i modelli di accesso degli indici, il che può aiutarti a prendere decisioni informate sulla gestione e l'ottimizzazione degli indici.

**Parametri**

Nessuno

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

L'esempio seguente mostra come utilizzare l'`$indexStats`operatore per analizzare l'utilizzo dell'indice in una raccolta Amazon DocumentDB.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

In questo esempio, l'`$indexStats`operatore mostra che l'accesso all'`_id_`indice è stato effettuato 5 volte e che l'`product_1`indice è stato effettuato 10 volte dall'ultimo ripristino o riavvio del server.

## Esempi di codice
<a name="indexStats-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$indexStats` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$isArray`operatore in Amazon DocumentDB viene utilizzato per verificare se un campo in un documento è un array. Questo operatore può essere utile nelle pipeline di aggregazione e nelle espressioni condizionali per gestire campi di tipo array.

**Parametri**
+ `field`: Il percorso del campo per verificare se si tratta di un array.

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

Questo esempio dimostra come utilizzare l'`$isArray`operatore per identificare i documenti in cui il campo «inventario» è un array.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="isArray-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$isArray` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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 Settimana
<a name="isoDayOfWeek"></a>

L'`$isoDayOfWeek`operatore in Amazon DocumentDB restituisce il giorno ISO della settimana per una data come valore intero. Il sistema di data settimanale ISO definisce ogni settimana che inizia il lunedì e termina la domenica, dove la settimana 1 è la settimana che contiene il primo giovedì dell'anno.

**Parametri**
+ `expression`: L'espressione della data per la quale restituire il giorno ISO della settimana.

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

L'esempio seguente mostra come utilizzare l'`$isoDayOfWeek`operatore per recuperare il giorno ISO della settimana per una serie di documenti relativi agli eventi.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="isoDayOfWeek-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$isoDayOfWeek` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$isoWeek`operatore in Amazon DocumentDB restituisce il numero della settimana ISO per una data. Il sistema di data settimanale ISO è un modo per numerare le settimane in un anno, in cui la prima settimana di un nuovo anno è la settimana che contiene il primo giovedì di quell'anno. È diverso dal calendario gregoriano, in cui la prima settimana di un nuovo anno è la settimana che contiene il 1 gennaio.

**Parametri**

Nessuno

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

L'esempio seguente mostra come utilizzare l'`$isoWeek`operatore per recuperare il numero della settimana ISO per una determinata data.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="isoWeek-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$isoWeek` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$isoWeekYear`operatore in Amazon DocumentDB restituisce il numero dell'anno settimanale ISO 8601 per una determinata data. Il numero dell'anno settimanale ISO differisce dall'anno del calendario gregoriano in quanto l'anno della settimana può essere diverso dall'anno solare, specialmente all'inizio e alla fine dell'anno.

**Parametri**
+ `expression`: espressione della data per la quale restituire il numero dell'anno settimanale ISO 8601.

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

Questo esempio dimostra come utilizzare l'`$isoWeekYear`operatore per recuperare l'anno settimanale ISO 8601 per il campo data di ogni documento nella raccolta di eventi.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="isoWeekYear-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$isoWeekYear` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$last`operatore in Amazon DocumentDB viene utilizzato per restituire l'ultimo elemento di un array che corrisponde ai criteri di query. È particolarmente utile per recuperare l'elemento più recente o l'ultimo di un array che soddisfa una condizione specifica.

**Parametri**
+ `expression`: L'espressione per abbinare gli elementi dell'array.

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

L'esempio seguente dimostra l'uso dell'`$last`operatore in combinazione con `$filter` per recuperare l'ultimo elemento da un array che soddisfa una condizione specifica (ad esempio, il soggetto è 'scienza').

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="last-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$last` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$let`operatore in Amazon DocumentDB viene utilizzato per associare variabili a valori e utilizzare tali variabili nell'espressione. Consente di definire variabili locali che possono essere utilizzate nelle espressioni successive all'interno della stessa fase della pipeline di aggregazione.

**Parametri**
+ `vars`: un oggetto che definisce le variabili da utilizzare nell'espressione.
+ `in`: L'espressione in cui vengono utilizzate le variabili definite nel parametro vars.

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

Questo esempio dimostra l'utilizzo dell'`$let`operatore per calcolare l'area di un rettangolo.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="let-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$let` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$limit`operatore in Amazon DocumentDB viene utilizzato per limitare il numero di documenti restituiti da una query. È simile all'operatore `$limit` MongoDB, ma ci sono alcune considerazioni specifiche quando lo si utilizza con Amazon DocumentDB.

In Amazon DocumentDB, l'`$limit`operatore è utile per l'impaginazione, in cui si desidera recuperare un sottoinsieme del totale dei documenti corrispondenti. Consente di controllare il numero di documenti restituiti in ogni risposta, migliorando le prestazioni e riducendo la quantità di dati trasferiti sulla rete.

**Parametri**
+ `limit`: Il numero massimo di documenti da restituire. Deve essere un valore intero non negativo.

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

L'esempio seguente mostra come utilizzare l'`$limit`operatore per restituire al massimo un documento che corrisponde al filtro specificato.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

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

**Output**

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

## Esempi di codice
<a name="limit-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$limit` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$literal`operatore in Amazon DocumentDB viene utilizzato per rappresentare un valore letterale all'interno di una fase di pipeline di aggregazione. Consente di includere un valore specifico, ad esempio un numero, una stringa o un valore booleano, senza interpretarlo come riferimento di campo o espressione.

Questo operatore è particolarmente utile quando è necessario includere un valore letterale come parte di una pipeline di aggregazione più complessa, ad esempio quando si creano filtri di interrogazione dinamici o si eseguono calcoli.

**Parametri**

Nessuno

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

L'esempio seguente dimostra l'uso dell'`$literal`operatore per includere un valore letterale in una pipeline di aggregazione. L'`$literal`operatore viene utilizzato per includere il valore 18 come valore letterale nell'espressione \$1gt. Ciò consente alla pipeline di aggregazione di confrontare il campo di età con il valore letterale 18 per determinare se la persona è un adulto.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="literal-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$literal` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 4.0.

L'`$ln`operatore in Amazon DocumentDB calcola il logaritmo naturale (base e) di un numero specificato. Restituisce il logaritmo del numero alla base e.

**Parametri**
+ `expression`: Il numero per il quale verrà calcolato il logaritmo naturale.

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

L'esempio seguente dimostra l'utilizzo dell'`$log`operatore per calcolare il logaritmo naturale di un numero.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="ln-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$ln` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 4.0.

L'`$log`operatore in Amazon DocumentDB calcola il logaritmo naturale di un numero. Restituisce il logaritmo in base e del numero specificato.

**Parametri**
+ `expression`: Il numero per il quale verrà calcolato il logaritmo naturale.
+ `base`: Valore base per calcolare il log.

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

L'esempio seguente dimostra l'utilizzo dell'`$log`operatore per calcolare il logaritmo naturale di un numero.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="log-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$log` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 4.0.

L'`$log10`operatore in Amazon DocumentDB viene utilizzato per calcolare il logaritmo in base 10 di un numero. È utile per eseguire calcoli logaritmici su campi numerici all'interno della pipeline di aggregazione.

**Parametri**
+ `expression`: L'espressione numerica per la quale deve essere calcolato il logaritmo in base 10.

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

L'esempio seguente mostra come utilizzare l'`$log10`operatore per calcolare il logaritmo in base 10 di un campo numerico.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="log10-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$log10` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$lt` aggregazione confronta due valori e restituisce `true` se il primo valore è inferiore al secondo, altrimenti restituisce. `false`

**Parametri**
+ `expression1`: il primo valore da confrontare.
+ `expression2`: Il secondo valore da confrontare.

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

L'esempio seguente dimostra l'utilizzo dell'`$lt`operatore per identificare gli articoli in esaurimento.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="lt-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$lt` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'operatore di `$lte` aggregazione confronta due valori e restituisce `true` se il primo valore è minore o uguale al secondo, altrimenti restituisce. `false`

**Parametri**
+ `expression1`: il primo valore da confrontare.
+ `expression2`: Il secondo valore da confrontare.

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

L'esempio seguente dimostra l'utilizzo dell'`$lte`operatore per identificare articoli economici.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="lte-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$lte` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

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

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

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

  const result = await collection.aggregate([
    {
      $project: {
        dish: 1,
        price: 1,
        affordable: { $lte: ["$price", 10] }
      }
    }
  ]).toArray();

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

example();
```

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

```
from pymongo import MongoClient

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

    result = list(collection.aggregate([
        {
            '$project': {
                'dish': 1,
                'price': 1,
                'affordable': { '$lte': ['$price', 10] }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

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

La fase di `$lookup` aggregazione in Amazon DocumentDB consente di eseguire un'unione esterna sinistra tra due raccolte. Questa operazione consente di combinare i dati di più raccolte in base ai valori dei campi corrispondenti. È particolarmente utile quando è necessario incorporare dati provenienti da raccolte correlate nei risultati delle query.

**Parametri**
+ `from`: il nome della raccolta con cui eseguire l'unione.
+ `localField`: Il campo dei documenti di input da confrontare con`foreignField`.
+ `foreignField`: Il campo dei documenti della `from` raccolta da confrontare con`localField`.
+ `as`: Il nome del nuovo campo da aggiungere ai documenti di output contenenti i documenti corrispondenti della `from` raccolta.

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

L'esempio seguente dimostra una semplice `$lookup` operazione che unisce i dati della `orders` raccolta alla raccolta. `customers`

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="lookup-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$lookup` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Nuovo dalla versione 4.0.

Non supportato dal cluster Elastic.

L'`$ltrim`operatore in Amazon DocumentDB viene utilizzato per rimuovere i caratteri iniziali da una stringa. Per impostazione predefinita, rimuove gli spazi bianchi iniziali, ma puoi anche specificare un set di caratteri da rimuovere passando l'argomento chars.

**Parametri**
+ `input`: La stringa di input da cui rimuovere i caratteri di spaziatura iniziali.
+ `chars`: (opzionale) Per rimuovere caratteri specifici.

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

L'esempio seguente dimostra l'utilizzo di `$ltrim` per rimuovere i caratteri specificati (» \$1») dall'inizio di una stringa.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="ltrim-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$ltrim` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$map`operatore in Amazon DocumentDB consente di applicare un'espressione specificata a ciascun elemento di un array e restituire un nuovo array con gli elementi trasformati. Questo operatore è particolarmente utile per manipolare e trasformare i dati all'interno degli array, il che può contribuire a semplificare il codice dell'applicazione e migliorare le prestazioni delle query spingendo l'elaborazione dell'array a livello di database.

**Parametri**
+ `input`: L'array da trasformare.
+ `as`: (opzionale) Il nome della variabile da utilizzare all'interno dell'espressione in per rappresentare l'elemento corrente in fase di elaborazione.
+ `in`: L'espressione da applicare a ogni elemento dell'array di input.

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

L'esempio seguente mostra come utilizzare l'operatore \$1map per trasformare una matrice di numeri, raddoppiando ogni valore.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="map-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$map` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

  const result = await collection.aggregate([
    {
      $project: {
        doubledNumbers: { $map: { input: "$numbers", as: "num", in: { $multiply: ["$$num", 2] } } }
      }
    }
  ]).toArray();

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

example();
```

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

```
from pymongo import MongoClient

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

    result = list(collection.aggregate([
        {
            '$project': {
                'doubledNumbers': { '$map': { 'input': '$numbers', 'as': 'num', 'in': { '$multiply': ['$$num', 2] } } }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

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

La fase della `$match` pipeline in Amazon DocumentDB viene utilizzata per filtrare i documenti di input solo in base a quelli che corrispondono ai criteri di query specificati. È una delle fasi della pipeline più comunemente utilizzate nelle operazioni di aggregazione. La `$match` fase viene applicata prima di qualsiasi altra fase della pipeline, il che consente di ridurre in modo efficiente il numero di documenti che devono essere elaborati nelle fasi successive.

**Parametri**
+ `query`: Un documento che esprime i criteri di selezione per l'operazione. Il documento di interrogazione utilizza la stessa sintassi del `find()` metodo.

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

L'esempio seguente dimostra l'uso dello `$match` stage per filtrare i documenti in base a un valore di campo specifico.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

Lo `$match` stage filtra i documenti per includere solo quelli in cui il `age` campo è maggiore di 30.

## Esempi di codice
<a name="match-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$match` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

  const db = client.db('test');
  const collection = db.collection('collection');

  const result = await collection.aggregate([
    { $match: { age: { $gt: 30 } } },
    { $project: { _id: 1, name: 1, city: 1 } }
  ]).toArray();

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

example();
```

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

```
from pymongo import MongoClient

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

    result = list(collection.aggregate([
        { '$match': { 'age': { '$gt': 30 } } },
        { '$project': { '_id': 1, 'name': 1, 'city': 1 } }
    ]))

    print(result)
    client.close()

example()
```

------

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

La fase di `$max` aggregazione viene utilizzata per restituire il valore massimo di un campo specificato in tutti i documenti in una fase di pipeline. Questo operatore è utile per trovare il valore più alto in un set di documenti.

**Parametri**
+ `expression`: L'espressione da utilizzare per calcolare il valore massimo.

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

L'esempio seguente mostra come utilizzare l'`$max`operatore per trovare il punteggio massimo in una raccolta di documenti degli studenti. La `$group` fase raggruppa tutti i documenti e l'`$max`operatore viene utilizzato per calcolare il valore massimo del `score` campo in tutti i documenti.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="max-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$max` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$meta` aggregazione accede ai metadati associati ai documenti in una pipeline di aggregazione. Viene comunemente utilizzato per recuperare i punteggi di ricerca testuali e ordinare i risultati in base alla pertinenza.

**Parametri**
+ `textScore`: recupera il punteggio di ricerca testuale che indica la pertinenza del documento rispetto alla query di ricerca.

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

L'esempio seguente dimostra l'utilizzo dell'`$meta`operatore in una pipeline di aggregazione per recuperare e ordinare i punteggi di ricerca testuali.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="meta-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$meta` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

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

------

# \$1unisci
<a name="merge"></a>

Introdotto nella versione 8.0

La fase di `$merge` aggregazione in Amazon DocumentDB viene utilizzata per unire i risultati della fase precedente della pipeline in una raccolta di destinazione. Ciò è utile per aggiornare o inserire documenti in una raccolta di destinazione in base ai dati dei documenti di input.

La `$merge` fase consente di eseguire varie azioni in base alla condizione di corrispondenza tra i documenti di input e la raccolta di destinazione, ad esempio:

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

**Parametri**
+ `into`: (obbligatorio) Il nome della raccolta di destinazione in cui unire i documenti di input.
+ `on`: (obbligatorio) I campi da utilizzare come condizione di corrispondenza tra i documenti di input e la raccolta di destinazione.
+ `whenMatched`: (opzionale) L'azione da eseguire quando il documento di input corrisponde a un documento esistente nella raccolta di destinazione. I valori supportati sono: `"merge"`, `"replace"`, `"keepExisting"` e `"fail"`.
+ `whenNotMatched`: (opzionale) L'azione da eseguire quando il documento di input non corrisponde a nessun documento nella raccolta di destinazione. I valori supportati sono: `"insert"` e`"fail"`.

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

L'esempio seguente mostra come utilizzare lo `$merge` stage per aggiornare una `users` raccolta con nuovi dati da una pipeline di input.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

Dopo aver eseguito la `$merge` pipeline, la `users` raccolta conterrà i seguenti documenti:

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

## Esempi di codice
<a name="merge-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$merge` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

Ecco un esempio di utilizzo dell'operatore \$1merge in un'applicazione 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 ]

Ecco un esempio di utilizzo dell'operatore \$1merge in un'applicazione 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>

L'`$mergeObjects`operatore in Amazon DocumentDB viene utilizzato per combinare più documenti o oggetti in un unico documento. Questo operatore è particolarmente utile quando è necessario unire il contenuto di due o più documenti o oggetti, sovrascrivendo potenzialmente i valori di un oggetto con quelli di un altro.

**Parametri**
+ `expression1`: Il primo oggetto da unire.
+ `expression2`: (opzionale) Il secondo oggetto da unire.
+ `expression3`: (opzionale) Oggetti aggiuntivi da unire.

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

L'esempio seguente mostra come utilizzare l'`$mergeObjects`operatore per combinare due oggetti.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

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

## Esempi di codice
<a name="mergeObjects-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$mergeObjects` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$millisecond`operatore in Amazon DocumentDB viene utilizzato per estrarre la parte in millisecondi di un valore di data.

**Parametri**

Nessuno

## Esempio (MongoDB Shell)
<a name="millisecond-examples"></a>

Questo esempio dimostra come utilizzare l'`$millisecond`operatore per estrarre la parte in millisecondi di un valore di data.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.events.aggregate([
  {
    $project: {
      name: 1,
      milliseconds: { $millisecond: "$timestamp" }
    }
  }
])
```

**Output**

```
[
  {
    "_id": ObjectId("644332a42054ed1b0d15f0c1"),
    "name": "Event 1",
    "milliseconds": 123
  },
  {
    "_id": ObjectId("644332a42054ed1b0d15f0c2"),
    "name": "Event 2",
    "milliseconds": 456
  },
  {
    "_id": ObjectId("644332a42054ed1b0d15f0c3"),
    "name": "Event 3",
    "milliseconds": 789
  }
]
```

## Esempi di codice
<a name="millisecond-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$millisecond` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$min`operatore restituisce il valore minimo da una matrice di valori. Può essere utilizzato nelle fasi di aggregazione per trovare il valore minimo per un campo specifico in più documenti.

**Parametri**
+ `expression`: L'espressione da valutare. Può essere un percorso di campo, una variabile o qualsiasi espressione che si risolve in un valore.

## Esempio (MongoDB Shell)
<a name="min-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$min`operatore per trovare il valore minimo del `age` campo in più documenti.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.users.aggregate([
  { $group: { _id: null, minAge: { $min: "$age" } } },
  { $project: { _id: 0, minAge: 1 } }
])
```

**Output**

```
[ { minAge: 28 } ]
```

## Esempi di codice
<a name="min-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$min` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

  const result = await users.aggregate([
    { $group: {
        _id: null,
        minAge: { $min: "$age" }
      }}
  ]).toArray();

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

findMinAge();
```

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

```
from pymongo import MongoClient

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

    result = list(users.aggregate([
        { "$group": {
            "_id": None,
            "minAge": { "$min": "$age" }
        }}
    ]))

    print(result)
    client.close()

find_min_age()
```

------

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

La fase della pipeline di `$minute` aggregazione in Amazon DocumentDB estrae il valore minuto da un campo di data o timestamp.

Questo operatore è utile quando è necessario eseguire calcoli o raggruppamenti basati su data e ora all'interno della pipeline di aggregazione.

**Parametri**
+ `expression`: Il campo della data o dell'ora da cui estrarre il valore dei minuti.

## Esempio (MongoDB Shell)
<a name="minute-examples"></a>

L'esempio seguente mostra come utilizzare l'`$minute`operatore per raggruppare i documenti in base al valore minuto estratto dal campo timestamp e contare il numero di documenti in ogni gruppo.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

```
[
  { "_id": { "minute": 30 }, "count": 2 },
  { "_id": { "minute": 31 }, "count": 2 },
  { "_id": { "minute": 32 }, "count": 1 }
]
```

## Esempi di codice
<a name="minute-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$minute` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$mod`operatore è un operatore aritmetico che esegue un'operazione modulo su un numero. Restituisce il resto della divisione di un numero per un altro. Questo operatore viene comunemente utilizzato per determinare se un numero è pari o dispari o per distribuire gli elementi in un numero finito di gruppi.

**Parametri**
+ `expression1`: L'espressione del dividendo.
+ `expression2`: L'espressione del divisore.

## Esempio (MongoDB Shell)
<a name="mod-examples"></a>

Questo esempio dimostra come utilizzare l'`$mod`operatore per determinare il numero di widget rimanenti durante la spedizione in pacchi da 100.

**Crea documenti di esempio**

```
db.widgets.insertMany([
  { "_id" : 1, "widget" : "A", "count" : 80372 },
  { "_id" : 2, "widget" : "B", "count" : 409282 },
  { "_id" : 3, "widget" : "C", "count" : 60739 }
])
```

**Esempio di interrogazione**

```
db.widgets.aggregate([
  { $addFields: { leftOver: { $mod: [ "$count", 100 ] } } }
])
```

**Output**

```
[
  { "_id" : 1, "widget" : "A", "count" : 80372, "leftOver" : 72 },
  { "_id" : 2, "widget" : "B", "count" : 409282, "leftOver" : 82 },
  { "_id" : 3, "widget" : "C", "count" : 60739, "leftOver" : 39 }
]
```

L'output mostra il resto del valore `count` diviso per 100 per ogni documento, che rappresenta il numero di widget rimanenti durante la spedizione in pacchi da 100.

## Esempi di codice
<a name="mod-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$mod` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$month`operatore in Amazon DocumentDB restituisce il mese di una data come numero compreso tra 1 e 12. Questo operatore è utile per estrarre il componente del mese da un campo di data ed eseguire aggregazioni e analisi basate sulle date.

**Parametri**
+ `date_expression`: Questa è l'espressione o il campo che contiene la data o il timestamp da cui si desidera estrarre il mese.

## Esempio (MongoDB Shell)
<a name="month-examples"></a>

L'esempio seguente mostra come utilizzare l'`$month`operatore per estrarre il mese da un campo data e raggruppare i dati per mese.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.sales.aggregate([
  { $group: { 
      _id: { month: { $month: "$date" } },
      totalSales: { $sum: "$price" }
    }},
  { $sort: { "_id.month": 1 } }
]);
```

**Output**

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

## Esempi di codice
<a name="month-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$month` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$multiply`operatore in Amazon DocumentDB viene utilizzato per moltiplicare i valori di due o più campi o espressioni. Questo operatore è particolarmente utile per eseguire operazioni aritmetiche su campi numerici all'interno di documenti. Può essere utilizzato in varie fasi della pipeline di aggregazione, ad esempio `$project` e`$addFields`, per creare nuovi campi o modificare quelli esistenti.

**Parametri**
+ `expression1`: La prima espressione numerica da moltiplicare.
+ `expression2`: La seconda espressione numerica da moltiplicare.
+ `[expression3, ...]`: (opzionale) Espressioni numeriche aggiuntive da moltiplicare.

## Esempio (MongoDB Shell)
<a name="multiply-examples"></a>

L'esempio seguente dimostra l'utilizzo di `$multiply` to calculing `bonus_miles` moltiplicando `base_miles` e `bonus_rate` per i clienti che hanno utilizzato una carta di credito per il viaggio.

**Documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="multiply-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$multiply` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

# \$1naturale
<a name="natural"></a>

L'`$natural`operatore in Amazon DocumentDB viene utilizzato per ordinare i documenti nel loro ordine naturale, ovvero l'ordine in cui sono stati inseriti nella raccolta. Ciò è in contrasto con il comportamento di ordinamento predefinito, che consiste nell'ordinare i documenti in base ai valori dei campi specificati.

**Parametri**

Nessuno

## Esempio (MongoDB Shell)
<a name="natural-examples"></a>

L'esempio seguente mostra come utilizzare l'`$natural`operatore per ordinare i documenti in una raccolta nel loro ordine naturale.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.people.find({}, { "_id": 1, "name": 1 }).sort({ "$natural": 1 });
```

**Output**

```
[
  { "_id": 1, "name": "María García" },
  { "_id": 2, "name": "Arnav Desai" },
  { "_id": 3, "name": "Li Juan" },
  { "_id": 4, "name": "Carlos Salazar" },
  { "_id": 5, "name": "Sofia Martínez" }
]
```

La query ordina i documenti della raccolta nel loro ordine naturale, che è l'ordine in cui sono stati inseriti.

## Esempi di codice
<a name="natural-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$natural` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$ne` aggregazione confronta due valori e restituisce `true` se non sono uguali, altrimenti restituisce. `false`

**Parametri**
+ `expression1`: Il primo valore da confrontare.
+ `expression2`: Il secondo valore da confrontare.

## Esempio (MongoDB Shell)
<a name="ne-aggregation-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$ne`operatore per identificare gli ordini con modifiche di stato.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.orders.aggregate([
  {
    $project: {
      orderId: 1,
      status: 1,
      expectedStatus: 1,
      needsAttention: { $ne: ["$status", "$expectedStatus"] }
    }
  }
]);
```

**Output**

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

## Esempi di codice
<a name="ne-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$ne` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'operatore `$not` di aggregazione esegue un'operazione NOT logica su un'espressione. Restituisce `true` se l'espressione restituisce a `false` e `false` se l'espressione restituisce a. `true`

**Parametri**
+ `expression`: L'espressione da negare.

## Esempio (MongoDB Shell)
<a name="not-aggregation-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$not`operatore per invertire i valori booleani.

**Crea documenti di esempio**

```
db.users.insertMany([
  { _id: 1, name: "Alice", active: true },
  { _id: 2, name: "Bob", active: false },
  { _id: 3, name: "Charlie", active: true }
]);
```

**Esempio di interrogazione**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      active: 1,
      inactive: { $not: ["$active"] }
    }
  }
]);
```

**Output**

```
[
  { _id: 1, name: 'Alice', active: true, inactive: false },
  { _id: 2, name: 'Bob', active: false, inactive: true },
  { _id: 3, name: 'Charlie', active: true, inactive: false }
]
```

## Esempi di codice
<a name="not-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$not` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'operatore di `$objectToArray` aggregazione in Amazon DocumentDB converte un oggetto (o documento) in un array. L'input per l'operatore è un documento e l'output è costituito da un elemento di matrice per ogni coppia campo-valore nel documento di input. Questo operatore è utile quando è necessario utilizzare i singoli campi di un documento come matrice, ad esempio quando si desidera trovare il documento con il valore massimo o minimo per un determinato campo.

**Parametri**
+ `expression`: L'espressione del documento da convertire in una matrice.

## Esempio (MongoDB Shell)
<a name="objectToArray-examples"></a>

L'esempio seguente mostra come utilizzare l'`$objectToArray`operatore per trovare il documento con l'inventario massimo per una catena di negozi di noleggio video.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.videos.aggregate([
  {
    $project: {
      name: 1,
      videos: {
        $objectToArray: "$inventory"
      }
    }
  },
  {
    $unwind: "$videos"
  },
  {
    $group: {
      _id: "$name",
      maxInventory: {
        $max: "$videos.v"
      }
    }
  }
]);
```

**Output**

```
[
  {
    "_id": "Bravemind",
    "maxInventory": 1000
  },
  {
    "_id": "Live Soft",
    "maxInventory": 1000
  },
  {
    "_id": "Romancing the Rock",
    "maxInventory": 500
  },
  {
    "_id": "Top Pilot",
    "maxInventory": 1000
  }
]
```

## Esempi di codice
<a name="objectToArray-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$objectToArray` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$or` aggregazione valuta più espressioni e restituisce `true` se almeno un'espressione restituisce lo stesso risultato. `true` Restituisce `false` solo se tutte le espressioni lo sono. `false`

**Parametri**
+ `expressions`: Una serie di espressioni da valutare.

## Esempio (MongoDB Shell)
<a name="or-aggregation-examples"></a>

L'esempio seguente dimostra l'utilizzo `$or` dell'operatore per verificare se i prodotti soddisfano uno qualsiasi dei criteri multipli.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.items.aggregate([
  {
    $project: {
      name: 1,
      price: 1,
      onSale: 1,
      goodDeal: {
        $or: [
          { $lt: ["$price", 50] },
          { $eq: ["$onSale", true] }
        ]
      }
    }
  }
]);
```

**Output**

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

## Esempi di codice
<a name="or-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$or` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$out`operatore in Amazon DocumentDB viene utilizzato per scrivere il risultato di una pipeline di aggregazione in una raccolta specificata.

`$out`dovrebbe essere l'ultima fase della pipeline.

**Parametri**
+ `output_collection`: il nome della raccolta di output in cui scrivere i risultati dell'aggregazione.

**Nota**: se la raccolta esiste già, verrà sostituita con i risultati della fase di aggregazione.

## Esempio (MongoDB Shell)
<a name="out-examples"></a>

L'esempio seguente dimostra come utilizzare l'`$out`operatore in Amazon DocumentDB per scrivere i risultati di una pipeline di aggregazione in una nuova raccolta.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.products.aggregate([
  { $group: { _id: "$category", totalPrice: { $sum: "$price" } } },
  { $out: "product_categories" }
])
```

**Output**

Nessuno (i risultati vengono scritti nella raccolta di output).

La pipeline di aggregazione raggruppa i prodotti per categoria e calcola il prezzo totale degli articoli per ciascuna categoria. L'`$out`operatore scrive i risultati in una nuova raccolta denominata «product\$1categories».

**Per visualizzare i risultati nella raccolta di output:**

```
db.product_categories.find()
[
{ "_id" : "Books", "totalPrice" : 125 },
{ "_id" : "Electronics", "totalPrice" : 300 }
]
```

## Esempi di codice
<a name="out-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$out` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Introdotto nella versione 8.0

L'`$pow`operatore in Amazon DocumentDB consente di elevare un numero a una potenza. Questo può essere utile per eseguire calcoli esponenziali all'interno della pipeline di aggregazione.

**Parametri**
+ `<number>`(richiesto): Il numero da elevare a potenza.
+ `<exponent>`(richiesto): La potenza a cui deve essere elevato il numero.

## Esempio (MongoDB Shell)
<a name="pow-examples"></a>

L'esempio seguente mostra come utilizzare l'`$pow`operatore per calcolare il quadrato di un numero.

**Crea documenti di esempio**

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

**Esempio di query**

```
db.numbers.aggregate([
  { $addFields: { "square": { $pow: ["$value", 2] } } }
])
```

**Output**

```
[
  { "_id": 1, "value": 2, "square": 4 },
  { "_id": 2, "value": 3, "square": 9 },
  { "_id": 3, "value": 4, "square": 16 }
]
```

## Esempi di codice
<a name="pow-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$pow` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

Ecco un esempio di utilizzo dell'operatore \$1pow in un'applicazione 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 ]

Ecco un esempio di utilizzo dell'operatore \$1pow in un'applicazione 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>

L'operatore di `$push` aggregazione restituisce una matrice di tutti i valori di un'espressione specificata per ogni gruppo. In genere viene utilizzato all'interno dello `$group` stage per accumulare valori in una matrice.

**Parametri**
+ `expression`: L'espressione da valutare per ogni documento del gruppo.

## Esempio (MongoDB Shell)
<a name="push-aggregation-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$push`operatore per raccogliere tutti i nomi di prodotto per ogni categoria.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.sales.aggregate([
  {
    $group: {
      _id: "$category",
      products: { $push: "$product" }
    }
  }
]);
```

**Output**

```
[
  { _id: 'Furniture', products: [ 'Desk', 'Chair' ] },
  { _id: 'Electronics', products: [ 'Laptop', 'Mouse', 'Keyboard' ] }
]
```

## Esempi di codice
<a name="push-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$push` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$project`operatore in Amazon DocumentDB consente di includere o escludere selettivamente campi dai documenti di output, passare valori alla fase successiva della pipeline e calcolare nuovi campi dai valori dei documenti di input.

**Parametri**
+ `field`: Il campo da includere o escludere dai documenti di output può essere un percorso di campo (ad esempio, «a.b.c»).
+ `1`oppure`true`: include il campo nell'output.
+ `0`oppure`false`: esclude il campo dall'output.

## Esempio (MongoDB Shell)
<a name="project-examples"></a>

L'esempio seguente mostra l'utilizzo dell'`$project`operatore nella raccolta degli studenti

**Crea documenti di esempio**

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

Questa query include solo i `math` campi `name` e nell'output. Il `_id` campo è incluso per impostazione predefinita a meno che non sia esplicitamente escluso.

```
db.students.aggregate([
  { $project: { "name": 1, "math": 1 } }
])
```

**Output**

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

Questa query esclude i `_id` campi `grade` and dall'output, mostrando tutti gli altri campi (`name`,`math`,`science`).

```
db.students.aggregate([
  { $project: { "grade": 0, "_id": 0 } }
])
```

**Output**

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

## Esempi di codice
<a name="project-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$project` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

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

Nuovo dalla versione 8.0

L'`$rand`operatore in Amazon DocumentDB viene utilizzato per generare un numero casuale compreso tra 0 e 1.

**Parametri**

Nessuno

## Esempio (MongoDB Shell)
<a name="rand-examples"></a>

L'esempio seguente mostra come utilizzare l'`$rand`operatore per selezionare casualmente due documenti dalla raccolta. `temp`

**Crea documenti di esempio**

```
db.items.insertMany([
  { "name": "pencil", "quantity": 110 },
  { "name": "pen", "quantity": 159 }
])
```

**Esempio di query**

```
db.items.aggregate([
  {
    $project: {
      randomValue: { $rand: {} }
    }
  }
])
```

**Output**

```
[
  {
    _id: ObjectId('6924a5edd66dcae121d29517'),
    randomValue: 0.8615243955294392
  },
  {
    _id: ObjectId('6924a5edd66dcae121d29518'),
    randomValue: 0.22815483022099903
  }
]
```

## Esempi di codice
<a name="rand-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$rand` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$range` aggregazione in Amazon DocumentDB viene utilizzato per creare una matrice di numeri consecutivi all'interno di un intervallo specificato. Questo operatore è particolarmente utile per generare sequenze di numeri, ad esempio gli indicatori di miglia per i punti di ristoro durante una gara, come illustrato negli esempi seguenti.

**Parametri**
+ `start`: Il valore iniziale per l'intervallo.
+ `end`: Il valore finale dell'intervallo.
+ `step`: (opzionale) Il valore del passo da utilizzare per generare l'intervallo. Se non viene fornito, il valore predefinito del passo è 1.

## Esempio (MongoDB Shell)
<a name="range-examples"></a>

In questo esempio, utilizzeremo l'`$range`operatore per generare gli indicatori di miglio per le stazioni idriche in una gara ciclistica.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.races.aggregate([
  {
    $project: {
      race: 1,
      "waterStations": { $range: [20, "$distance", 20] }
    }
  }
]);
```

**Output**

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

## Esempi di codice
<a name="range-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$range` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

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

    const pipeline = [
      {
        $project: {
          race: 1,
          waterStations: { $range: [20, "$distance", 20] } 
        }
      }
    ];

    const results = await collection.aggregate(pipeline).toArray();

    console.dir(results, { depth: null });

  } finally {
    await client.close();
  }
}

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

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

```
from pymongo import MongoClient

def example():

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

  try:
      db = client.test
      collection = db.races

      pipeline = [
          {
              "$project": {
                  "race": 1,
                  "waterStations": { "$range": [20, "$distance", 20] }
              }
          }
      ]

      results = collection.aggregate(pipeline)

      for doc in results:
          print(doc)

  except Exception as e:
      print(f"An error occurred: {e}")

  finally:
      client.close()

example()
```

------

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

La fase di `$redact` aggregazione in Amazon DocumentDB viene utilizzata per includere o escludere selettivamente contenuti dai documenti di output in base ai valori dei campi specificati. Ciò è particolarmente utile in scenari in cui è necessario controllare la visibilità dei dati sensibili in base ai livelli di accesso o alle autorizzazioni degli utenti.

**Parametri**
+ `$cond`: espressione che restituisce uno `$$KEEP` o `$$DESCEND` più campi del documento. `$$PRUNE`
+ `$$KEEP`: mantiene il campo corrente nel documento di output.
+ `$$PRUNE`: rimuove il campo corrente dal documento di output.
+ `$$DESCEND`: applica in modo ricorsivo lo `$redact` stage al campo corrente, che è un oggetto o una matrice.

## Esempio (MongoDB Shell)
<a name="redact-examples"></a>

In questo esempio, useremo lo `$redact` stage per filtrare gli ordini in base al loro stato, mostrando solo gli ordini con valori di stato specifici.

**Crea documenti di esempio**

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

**Esempio di query**

```
db.orders.aggregate([
  {
    $redact: {
      $cond: {
        if: { $in: ["$status", ["shipped", "processing"]] },
        then: "$$KEEP",
        else: "$$PRUNE"
      }
    }
  }
])
```

**Output**

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

In questo esempio, lo `$redact` stage controlla il valore del `status` campo in ogni documento. Se `status` è «spedito» o «in elaborazione», il documento viene conservato (`$$KEEP`). Altrimenti, il documento viene eliminato ()`$$PRUNE`.

## Esempi di codice
<a name="redact-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$redact` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$reduce` aggregazione in Amazon DocumentDB viene utilizzato per applicare cumulativamente una funzione di due argomenti agli elementi di un array per ridurre l'array a un singolo valore. Questo operatore è particolarmente utile per eseguire calcoli o trasformazioni complessi sui dati dell'array all'interno della pipeline di aggregazione.

**Parametri**
+ `input`: L'array da ridurre.
+ `initialValue`: Il valore iniziale da utilizzare nell'operazione di riduzione.
+ `in`: L'espressione da valutare su ogni elemento dell'`input`array. Questa espressione dovrebbe restituire un valore che verrà utilizzato nella successiva iterazione della riduzione.

## Esempio (MongoDB Shell)
<a name="reduce-examples"></a>

L'esempio seguente mostra come utilizzare l'`$reduce`operatore per calcolare la somma di tutti gli elementi di un array.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.orders.aggregate([
  {
    $project: {
      total: {
        $reduce: {
          input: "$items",
          initialValue: 0,
          in: { $add: ["$$value", "$$this"] }
        }
      }
    }
  }
])
```

**Output**

```
[
  { "_id": 1, "total": 15 },
  { "_id": 2, "total": 60 },
  { "_id": 3, "total": 80 },
  { "_id": 4, "total": 300 }
]
```

L'`$reduce`operatore esegue un'iterazione sull'`items`array, aggiungendo ogni elemento al valore `initialValue` di 0. Il risultato è la somma di tutti gli elementi dell'array.

## Esempi di codice
<a name="reduce-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$reduce` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

Ecco un esempio di utilizzo dell'`$reduce`operatore in un'applicazione 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 ]

Ecco un esempio di utilizzo dell'`$reduce`operatore in un'applicazione 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>

Nuovo dalla versione 5.0.

Non supportato dal cluster Elastic.

L'`$regexFind`operatore in Amazon DocumentDB viene utilizzato per eseguire la corrispondenza delle espressioni regolari su campi stringa all'interno dei documenti. Consente di cercare ed estrarre sottostringhe specifiche che corrispondono a un determinato modello di espressione regolare.

**Parametri**
+ `input`: Il campo o l'espressione di stringa da cercare.
+ `regex`: Il modello di espressione regolare da abbinare.
+ `options`: (opzionale) Un oggetto che specifica parametri opzionali per l'espressione regolare, come la distinzione tra maiuscole e minuscole e la corrispondenza su più righe. Le opzioni supportate sono `i` (senza distinzione tra maiuscole e minuscole) e (multilinea). `m`

## Esempio (MongoDB Shell)
<a name="regexFind-examples"></a>

L'esempio seguente mostra come utilizzare l'`$regexFind`operatore per cercare documenti in cui il `name` campo corrisponde a uno specifico modello di espressione regolare.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.users.aggregate([
  {
    $project: {
      names: {
        $regexFind: { input: '$name', regex: 'j', options: 'i' }
      }
    }
  },
  { $match: {names: {$ne: null}}}
])
```

Questa query restituirà tutti i documenti in cui il `name` campo contiene la lettera «j» (senza distinzione tra maiuscole e minuscole).

**Output**

```
[
  { _id: 1, names: { match: 'J', idx: 0, captures: [] } }
]
```

**Nota:** se la tua query utilizza Amazon DocumentDB planner versione 1, devi usare un suggerimento per utilizzare un indice. Senza un suggerimento, la query può eseguire una scansione della raccolta. Per verificare la versione del tuo planner e saperne di più sull'uso dei suggerimenti, consulta la [documentazione di Amazon DocumentDB Query Planner] (-planner.html). https://docs.aws.amazon.com/documentdb/ latest/developerguide/query

## Esempi di codice
<a name="regexFind-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$regexFind` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

Introdotto nella versione 5.0

L'`$regexFindAll`operatore in Amazon DocumentDB viene utilizzato per eseguire la corrispondenza delle espressioni regolari su campi stringa all'interno dei documenti. Consente di cercare ed estrarre sottostringhe specifiche che corrispondono a un determinato modello di espressione regolare, restituendo tutte le corrispondenze dell'espressione regolare.

**Parametri**
+ `input`: Il campo o l'espressione di stringa da cercare.
+ `regex`: Il modello di espressione regolare da abbinare.
+ `options`: (opzionale) Un oggetto che specifica parametri opzionali per l'espressione regolare, come la distinzione tra maiuscole e minuscole e la corrispondenza su più righe. Le opzioni supportate sono `i` (senza distinzione tra maiuscole e minuscole) e (multilinea). `m`

## Esempio (MongoDB Shell)
<a name="regexFindAll-examples"></a>

L'esempio seguente mostra come utilizzare l'`$regexFindAll`operatore per estrarre tutte le sequenze di lettere dal campo. `email`

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      emailMatches: {
        $regexFindAll: { input: '$email', regex: '[a-z]+', options: 'i' }
      }
    }
  }
])
```

**Output**

```
[
  {
    _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 la tua query utilizza Amazon DocumentDB planner versione 1, devi usare un suggerimento per utilizzare un indice. Senza un suggerimento, la query può eseguire una scansione della raccolta. Per verificare la versione del tuo planner e saperne di più sull'uso dei suggerimenti, consulta la [documentazione di Amazon DocumentDB Query Planner] (-planner.html). https://docs.aws.amazon.com/documentdb/ latest/developerguide/query

## Esempi di codice
<a name="regexFindAll-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$regexFindAll` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

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

Ecco un esempio di utilizzo dell'`$regexFind`operatore in un'applicazione 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 ]

Ecco un esempio di utilizzo dell'`$regexFind`operatore in un'applicazione 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>

Nuovo dalla versione 5.0. Non supportato dal cluster Elastic.

L'`$regexMatch`operatore in Amazon DocumentDB viene utilizzato per eseguire la corrispondenza delle espressioni regolari sui campi stringa. Restituisce un valore booleano (`true`o`false`) che indica se la stringa di input corrisponde al modello specificato.

**Parametri**
+ `input`: La stringa da testare rispetto all'espressione regolare.
+ `regex`: Il modello di espressione regolare da abbinare.
+ `options`: (Facoltativo) Contrassegni per modificare il comportamento delle espressioni regolari, ad esempio matching senza distinzione tra maiuscole e minuscole (`i`) o la corrispondenza multilinea (). `m`

## Esempio (MongoDB Shell)
<a name="regexMatch-examples"></a>

L'esempio seguente mostra come utilizzare l'`$regexMatch`operatore per verificare se i nomi iniziano con la lettera 'M'. L'operatore restituisce `true` or `false` per ogni documento.

**Crea documenti di esempio**

```
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" },

]);
```

**Esempio di interrogazione**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      startsWithM: {
        $regexMatch: {
          input: "$name",
          regex: "^M",
          options: "i"
        }
      }
    }
  }
]);
```

**Output**

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

## Esempi di codice
<a name="regexMatch-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$regexMatch` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

# \$1 Sostituisci tutto
<a name="replaceAll"></a>

Introdotto nella 5.0

L'`$replaceAll`operatore in Amazon DocumentDB viene utilizzato per sostituire tutte le occorrenze di un modello di stringa specificato all'interno di un campo con una nuova stringa. Questo operatore può essere utile per attività come la normalizzazione dei dati, la pulizia del testo e la manipolazione delle stringhe.

**Parametri**
+ `input`: il campo o l'espressione contenente la stringa da sostituire.
+ `find`: Lo schema di stringhe da cercare e sostituire.
+ `replacement`: La stringa con cui sostituire le occorrenze corrispondenti.

## Esempio (MongoDB Shell)
<a name="replaceAll-examples"></a>

L'esempio seguente mostra come utilizzare l'`$replaceAll`operatore in una pipeline di aggregazione per sostituire tutte le occorrenze della stringa «Chocolatier» con «Chocolate Co.» nel campo «BrandName» di una collezione «products».

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.products.aggregate([
  {
    $addFields: {
      "brandName": {
        $replaceAll: {
          input: "$brandName",
          find: "Chocolatier",
          replacement: "Chocolate Co."
        }
      }
    }
  }
])
```

**Output**

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

## Esempi di codice
<a name="replaceAll-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$replaceAll` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

  const results = await collection.aggregate([
    {
      $addFields: {
        "brandName": {
          $replaceAll: {
            input: "$brandName",
            find: "Chocolatier",
            replacement: "Chocolate Co."
          }
        }
      }
    }
  ]).toArray();

  console.log(results);

  await client.close();
}

replaceAll();
```

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

```
from pymongo import MongoClient

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

    results = list(collection.aggregate([
        {
            "$addFields": {
                "brandName": {
                    "$replaceAll": {
                        "input": "$brandName",
                        "find": "Chocolatier",
                        "replacement": "Chocolate Co."
                    }
                }
            }
        }
    ]))

    print(results)

    client.close()

replace_all()
```

------

# \$1 Sostituisci uno
<a name="replaceOne"></a>

Introdotto nella 5.0

L'`$replaceOne`operatore in Amazon DocumentDB è un operatore di espressione di stringa utilizzato nelle pipeline di aggregazione per sostituire la prima occorrenza di una sottostringa specificata all'interno di una stringa con una stringa sostitutiva. Questo operatore fa distinzione tra maiuscole e minuscole e sostituisce solo la prima corrispondenza trovata.

**Parametri**
+ `input`: La stringa (campo) su cui eseguire la ricerca.
+ `find`: La stringa da cercare all'interno dell'input.
+ `replacement`: La stringa che sostituisce la prima occorrenza della ricerca nell'input (campo).

## Esempio (MongoDB Shell)
<a name="replaceOne-examples"></a>

L'esempio seguente mostra come utilizzare l'`$replaceOne`operatore all'interno di una pipeline di aggregazione per sostituire le sottostringhe nei nomi dei prodotti.

**Crea documenti di esempio**

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

**Esempio di aggregazione**

```
db.products.aggregate([
  {
    $addFields: {
      standardizedName: {
        $replaceOne: {
          input: "$name",
          find: "Pack",
          replacement: "Package"
        }
      }
    }
  }
]);
```

**Output**

L'output mostra che solo la prima occorrenza di «Pack» in ogni nome di prodotto è stata sostituita con «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"
  }
```

## Esempi di codice
<a name="replaceOne-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$replaceOne` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$replaceRoot`operatore viene utilizzato per sostituire il documento radice con il documento incorporato specificato. Ciò è utile quando si desidera promuovere un documento annidato al livello superiore o ristrutturare l'output dei dati.

**Parametri**
+ `newRoot`: il nuovo documento radice che sostituirà il documento radice esistente.

## Esempio (MongoDB Shell)
<a name="replaceRoot-examples"></a>

Questo esempio mostra come estrarre le informazioni sull'indirizzo di spedizione dagli ordini dei clienti, utile per generare etichette di spedizione o elenchi di indirizzi.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.orders.aggregate([
  {
    $replaceRoot: {
      newRoot: "$shippingAddress"
    }
  }
])
```

**Output**

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

## Esempi di codice
<a name="replaceRoot-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$replaceRoot` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

# \$1sostituisci con
<a name="replaceWith"></a>

Nuovo dalla versione 8.0

Non supportato dal cluster Elastic.

La fase di `$replaceWith` aggregazione in Amazon DocumentDB viene utilizzata per sostituire il documento di input con un nuovo documento. Tutti i campi esistenti nel documento di input, incluso il campo \$1id, vengono sostituiti dal nuovo documento. `$replaceWith`è comunemente usato per appiattire i documenti o promuovere un documento incorporato al livello superiore.

**Parametri**
+ `<replacement>`(obbligatorio): Il nuovo documento che sostituirà il documento esistente.

## Esempio (MongoDB Shell)
<a name="replaceWith-examples"></a>

L'esempio seguente mostra come utilizzare l'`$replaceWith`operatore per sostituire un documento esistente in una raccolta Amazon DocumentDB.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.restaurants.aggregate([
  { $replaceWith: {
      name: "$name",
      cuisine: "$cuisine",
      rating: { $avg: "$ratings" }
    }
  }
]);
```

**Output**

```
[
  {
    name: 'Biryani Adda',
    cuisine: 'Indian',
    rating: 3.4
  },
  {
    name: 'The Burger Spot',
    cuisine: 'American',
    rating: 2.7777777777777777
  }
]
```

## Esempi di codice
<a name="replaceWith-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$replaceWith` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$reverseArray`operatore in Amazon DocumentDB viene utilizzato per invertire gli elementi di un array nell'ordine specificato. Questo operatore è utile quando è necessario riordinare gli elementi di un array nella direzione inversa.

**Parametri**
+ `expression`: L'espressione dell'array da invertire.

## Esempio (MongoDB Shell)
<a name="reverseArray-examples"></a>

L'esempio seguente mostra come utilizzare l'`$reverseArray`operatore per invertire l'ordine degli elementi in un array.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.miles.aggregate([
  {
    $project: {
      _id: 1,
      member_since: 1,
      credit_card: 1,
      reversed_flight_miles: { $reverseArray: "$flight_miles" }
    }
  }
]);
```

**Output**

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

In questo esempio, l'`$reverseArray`operatore viene utilizzato per invertire l'ordine dell'`flight_miles`array. Il `reversed_flight_miles` campo risultante nell'output mostra gli elementi dell'array nell'ordine inverso.

## Esempi di codice
<a name="reverseArray-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$reverseArray` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

Ecco un esempio di utilizzo dell'`$reverseArray`operatore in un'applicazione 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 ]

Ecco un esempio di utilizzo dell'`$reverseArray`operatore in un'applicazione 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>

Nuovo dalla versione 4.0.

Non supportato dal cluster Elastic.

L'`$rtrim`operatore in Amazon DocumentDB viene utilizzato per rimuovere i caratteri finali da una stringa. Per impostazione predefinita, rimuove gli spazi bianchi finali, ma è anche possibile specificare un set di caratteri da rimuovere passando l'argomento chars.

**Parametri**
+ `input`: La stringa di input da cui rimuovere i caratteri di spaziatura finali.
+ `chars`: (opzionale) Per rimuovere caratteri specifici.

## Esempio (MongoDB Shell)
<a name="rtrim-examples"></a>

L'esempio seguente mostra come utilizzare l'`$rtrim`operatore per rimuovere i caratteri specificati finali (» \$1») da una stringa.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="rtrim-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$rtrim` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

  try {

    const db = client.db('test');
    const collection = db.collection('collection');  

    const pipeline = [
      {
        $project: {
          _id: 0,
          name: { $rtrim: { input: "$name", chars: " *" } },
          age: 1
        }
      }
    ];

    const results = await collection.aggregate(pipeline).toArray();
    console.dir(results, { depth: null });

  } catch (err) {
    console.error('Error occurred:', err);
  } finally {
    await client.close();
  }
}

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

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

```
from pymongo import MongoClient

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

    try:

        db = client.test
        collection = db.collection

        pipeline = [
            {
                "$project": {
                    "_id": 0,
                    "name": { "$rtrim": { "input": "$name", "chars": " *" } },
                    "age": 1
                }
            }
        ]

        results = collection.aggregate(pipeline)

        for doc in results:
            print(doc)

    except Exception as e:
        print(f"An error occurred: {e}")

    finally:
        client.close()

example()
```

------

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

La fase di `$sample` aggregazione in Amazon DocumentDB viene utilizzata per selezionare in modo casuale un numero specifico di documenti da una raccolta. Ciò è utile per attività come l'analisi dei dati, il test e la generazione di campioni per un'ulteriore elaborazione.

**Parametri**
+ `size`: il numero di documenti da selezionare casualmente.

## Esempio (MongoDB Shell)
<a name="sample-examples"></a>

L'esempio seguente mostra come utilizzare lo `$sample` stage per selezionare casualmente due documenti dalla raccolta. `temp`

**Create documenti di esempio**

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

**Esempio di interrogazione**

```
db.temp.aggregate([
   { $sample: { size: 2 } }
])
```

**Output**

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

Come mostrano i risultati, 2 dei 10 documenti sono stati campionati casualmente. È ora possibile utilizzare questi documenti per determinare una media o eseguire calcoli. min/max 

## Esempi di codice
<a name="sample-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$sample` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

# \$1ricerca
<a name="search"></a>

Nuovo dalla versione 5.0.

L'`$search`operatore in Amazon DocumentDB viene utilizzato per fornire funzionalità di ricerca di testo.

**Parametri**

Nessuno

## Esempio (MongoDB Shell)
<a name="search-examples"></a>

L'esempio seguente mostra come utilizzare l'`$search`operatore per eseguire una query di ricerca testuale.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.textcollection.find(
  { $text: { $search: "John" } }
);
```

**Output**

```
[
  {
    _id: 1,
    name: 'John Doe',
    description: 'This is a sample document about John Doe.'
  }
]
```

## Esempi di codice
<a name="search-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$search` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$second`operatore in Amazon DocumentDB estrae il componente secondi da una data o un timestamp. Viene utilizzato per recuperare il valore dei secondi da un campo di data o timestamp.

**Parametri**
+ `expression`: Il campo della data o dell'ora da cui estrarre il valore dei secondi. Questa espressione può essere un percorso di campo o qualsiasi espressione valida che si risolva in una data o un timestamp.

## Esempio (MongoDB Shell)
<a name="second-examples"></a>

L'esempio seguente mostra come utilizzare l'`$second`operatore per estrarre il componente dei secondi da un campo data.

**Crea documenti di esempio**

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

**Esempio di query**

```
db.users.aggregate([{ $project: { name: 1, dobSeconds: { $second: "$dob" } } }])
```

**Output**

```
[
  { "_id" : ObjectId("6089a9c306a829d1f8b456a1"), "name" : "John", "dobSeconds" : 45 },
  { "_id" : ObjectId("6089a9c306a829d1f8b456a2"), "name" : "Jane", "dobSeconds" : 59 },
  { "_id" : ObjectId("6089a9c306a829d1f8b456a3"), "name" : "Bob", "dobSeconds" : 0 }
]
```

## Esempi di codice
<a name="second-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$second` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 8.0

Non supportato dal cluster Elastic.

La fase di `$set` aggregazione in Amazon DocumentDB consente di aggiungere nuovi campi o aggiornare i valori dei campi esistenti nella documentazione durante una pipeline di aggregazione.

**Parametri**
+ `expression`: L'espressione da valutare. Può trattarsi di qualsiasi espressione di aggregazione valida, inclusi riferimenti di campo e operazioni aritmetiche.

## Esempio (MongoDB Shell)
<a name="set-stage-examples"></a>

L'esempio seguente dimostra l'uso della fase di `$set` aggregazione per calcolare i totali moltiplicando il campo per il campo. `quantity` `price`

**Crea documenti di esempio**

```
db.inventory.insertMany([
  { item: "pencil", quantity: 100, price: 0.24},
  { item: "pen", quantity: 204, price: 1.78 }
]);
```

**Esempio di aggregazione**

```
db.inventory.aggregate([
  {
    $set: {
      total: { $multiply: ["$quantity", "$price"] }
    }
  }
])
```

**Output**

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

## Esempi di codice
<a name="set-stage-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$set` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

Novità dalla versione 4.0.

L'`$setDifference`operatore in Amazon DocumentDB viene utilizzato per confrontare due set e restituire gli elementi che si trovano nel primo set ma non nel secondo set. Questo operatore è utile per trovare gli elementi unici tra due set.

**Parametri**
+ `firstSet`: Il primo set da confrontare.
+ `secondSet`: Il secondo set da confrontare.

## Esempio (MongoDB Shell)
<a name="setDifference-examples"></a>

L'esempio seguente mostra come utilizzare l'`$setDifference`operatore per trovare gli elementi unici tra due set.

**Crea documenti di esempio**

```
db.collection.insertMany([
  { _id: 1, fruits: ["apple", "banana", "cherry", "date"] },
  { _id: 2, fruits: ["banana", "cherry", "date", "elderberry"] }
]);
```

**Esempio di interrogazione**

```
db.collection.aggregate([
  {
    $project: {
      uniqueFruits: { $setDifference: ["$fruits", ["banana", "cherry", "date"]] }
    }
  }
]);
```

**Output**

```
[
  { "_id": 1, "uniqueFruits": ["apple"] },
  { "_id": 2, "uniqueFruits": ["elderberry"] }
]
```

L'interrogazione esegue le seguenti operazioni:

1. Utilizza lo `$project` stage per creare un nuovo campo `uniqueFruits` per ogni documento.

2. L'`$setDifference`operatore confronta l'`fruits`array con l'array `[&quot;banana&quot;, &quot;cherry&quot;, &quot;date&quot;]` e restituisce gli elementi unici dell'`fruits`array.

## Esempi di codice
<a name="setDifference-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$setDifference` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

Ecco un esempio di come utilizzare l'`$setDifference`operatore in un'applicazione 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 ]

Ecco un esempio di come utilizzare l'`$setDifference`operatore in un'applicazione 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>

L'`$setEquals`operatore in Amazon DocumentDB viene utilizzato per determinare se due set sono uguali. Confronta due array e restituisce `true` se contengono gli stessi elementi distinti, indipendentemente dal loro ordine.

**Parametri**
+ `expression1`: La prima matrice da confrontare.
+ `expression2`: Il secondo array da confrontare.

## Esempio (MongoDB Shell)
<a name="setEquals-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$setEquals`operatore per confrontare due set di valori.

**Crea documenti di esempio**

```
db.collection.insertMany([
  { _id: 1, fruits: ["apple", "banana", "cherry"] },
  { _id: 2, fruits: ["banana", "apple", "cherry"] },
  { _id: 3, fruits: ["apple", "banana", "orange"] }
])
```

**Esempio di query**

```
db.collection.find({
  $expr: {
    $setEquals: ["$fruits", ["apple", "banana", "cherry"]]
  }
})
```

**Output**

```
{ "_id" : 1, "fruits" : [ "apple", "banana", "cherry" ] }
{ "_id" : 2, "fruits" : [ "banana", "apple", "cherry" ] }
```

La query utilizza l'`$setEquals`operatore per confrontare il `fruits` campo di ogni documento con l'array`[&quot;apple&quot;, &quot;banana&quot;, &quot;cherry&quot;]`. Vengono restituiti i documenti in cui il `fruits` campo è uguale all'array di confronto.

## Esempi di codice
<a name="setEquals-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$setEquals` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$setIntersection`operatore in Amazon DocumentDB viene utilizzato per restituire gli elementi comuni tra due o più array. Questo operatore è particolarmente utile quando si lavora con set di dati e consente di trovare l'intersezione di più set.

**Parametri**
+ `array1`: La prima matrice da intersecare.
+ `array2`: Il secondo array da intersecare.
+ `arrayN`: (opzionale) Matrici aggiuntive da intersecare.

## Esempio (MongoDB Shell)
<a name="setIntersection-examples"></a>

L'esempio seguente mostra come utilizzare l'`$setIntersection`operatore per trovare gli elementi comuni tra due array.

**Crea documenti di esempio**

```
db.collection.insertMany([
  { _id: 1, colors: ["red", "blue", "green"] },
  { _id: 2, colors: ["blue", "yellow", "orange"] },
  { _id: 3, colors: ["red", "green", "purple"] }
])
```

**Esempio di query**

```
db.collection.aggregate([
  { $project: {
      _id: 1,
      commonColors: { $setIntersection: ["$colors", ["red", "blue", "green"]] }
    }
  }
])
```

**Output**

```
[
  { "_id": 1, "commonColors": ["red", "blue", "green"] },
  { "_id": 2, "commonColors": ["blue"] },
  { "_id": 3, "commonColors": ["red", "green"] }
]
```

## Esempi di codice
<a name="setIntersection-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$setIntersection` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$setIsSubset`operatore in Amazon DocumentDB viene utilizzato per determinare se un set di valori è un sottoinsieme di un altro set. È utile per eseguire confronti e operazioni basati su set su campi di matrice.

**Parametri**
+ `field`: Il campo a cui applicare l'`$setIsSubset`operatore.
+ `set`: Il set con cui confrontare il campo.

## Esempio (MongoDB Shell)
<a name="setIsSubset-examples"></a>

L'esempio seguente mostra l'utilizzo dell'`$setIsSubset`operatore per verificare se il `tags` campo è un sottoinsieme del set specificato.

**Crea documenti di esempio**

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

**Esempio di query**

```
db.products.find({
  $expr: { $setIsSubset: [["tag1", "tag2"], "$tags"] }
})
```

\$1Nota: \$1 `$setIsSubset` è un operatore di aggregazione e non può essere utilizzato direttamente nelle query find (). In questo esempio, `$expr` viene utilizzato con `find()` per colmare il divario tra gli operatori di query e le espressioni di aggregazione.

**Output**

```
[
  { "_id" : 1, "name" : "Product A", "tags" : [ "tag1", "tag2", "tag3" ] },
  { "_id" : 2, "name" : "Product B", "tags" : [ "tag1", "tag2" ] }
]
```

La query restituisce i documenti in cui il `tags` campo è un sottoinsieme dell'insieme. `[&quot;tag1&quot;, &quot;tag2&quot;]`

## Esempi di codice
<a name="setIsSubset-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$setIsSubset` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$setUnion` aggregazione in Amazon DocumentDB viene utilizzato per combinare due o più set di valori e restituire un set che contiene tutti gli elementi unici dei set di input. Questo operatore è utile quando è necessario eseguire operazioni basate su set su campi array nei documenti.

**Parametri**
+ `expression1`: espressione che si risolve in un array.
+ `expression2`: espressione che si risolve in una matrice.
+ `expressionN`: espressioni aggiuntive che si risolvono in matrici (opzionale).

## Esempio (MongoDB Shell)
<a name="setUnion-examples"></a>

L'esempio seguente mostra come utilizzare l'`$setUnion`operatore per combinare gli elementi unici di due campi di matrice in una raccolta.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      allInterests: { $setUnion: ["$hobbies", "$skills"] }
    }
  }
]);
```

**Output**

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

In questo esempio, l'`$setUnion`operatore viene utilizzato per combinare gli elementi univoci dei campi `hobbies` e `skills` array per ogni documento utente. Il `allInterests` campo risultante contiene l'unione di tutti gli hobby e le abilità unici di ogni utente.

## Esempi di codice
<a name="setUnion-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$setUnion` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

In Amazon DocumentDB, l'`$skip`operatore viene utilizzato per compensare il punto iniziale dei risultati della query, permettendo di recuperare un sottoinsieme specifico dei documenti corrispondenti. Ciò è particolarmente utile negli scenari di impaginazione, in cui si desidera recuperare pagine successive di risultati.

**Parametri**
+ `skip`: Il numero di documenti da saltare prima di restituire i documenti rimanenti.

## Esempio (MongoDB Shell)
<a name="skip-examples"></a>

L'esempio seguente mostra come utilizzare l'`$skip`operatore per recuperare la seconda pagina di risultati (documenti 11-20) da una raccolta.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.collection.find({}, { "name": 1 })
             .skip(10)
             .limit(10);
```

**Output**

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

## Esempi di codice
<a name="skip-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$skip` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$slice` aggregazione consente di restituire un sottoinsieme di un array attraversando l'array dall'inizio o dalla fine dell'array. Viene utilizzato per visualizzare un numero limitato di elementi da un campo di matrice, ad esempio gli N elementi superiori o inferiori.

**Parametri**
+ `array`: Il campo dell'array da suddividere.
+ `n`: un numero intero che specifica il numero di elementi da restituire. Un valore positivo inizia dall'inizio dell'array, mentre un valore negativo inizia dalla fine dell'array.

## Esempio (MongoDB Shell)
<a name="slice-examples"></a>

L'esempio seguente mostra come `$slice` restituire i primi due dolci preferiti per ogni chef.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.sweets.aggregate([
  { $project: { _id: 0, name: 1, topTwoFavorites: { $slice: [ "$favorites", 2 ] } } }
]);
```

**Output**

```
[
  { name: 'Alvin', topTwoFavorites: [ 'chocolate', 'cake' ] },
  { name: 'Tom', topTwoFavorites: [ 'donuts', 'pudding' ] },
  { name: 'Jessica', topTwoFavorites: [ 'fudge', 'smores' ] },
  { name: 'Rachel', topTwoFavorites: [ 'ice cream' ] }
]
```

In questo esempio, l'`$slice`operatore viene utilizzato per estrarre i primi due elementi dall'`favorites`array per ogni documento.

## Esempi di codice
<a name="slice-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$slice` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$size`operatore viene utilizzato per restituire il conteggio degli elementi all'interno di un campo di matrice. Questo può essere usato per determinare il numero di elementi in un array archiviato in un documento.

**Parametri**
+ `field`: il percorso del campo di cui si desidera restituire la dimensione dell'array.

## Esempio (MongoDB Shell)
<a name="size-examples"></a>

Questo esempio mostra come utilizzare l'`$size`operatore per restituire il numero di team seguiti da ciascun utente.

**Crea documenti di esempio**

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

**Esempio di query**

```
db.profiles.aggregate([
  {
    $project: {
      _id: 0,
      name: 1,
      "numberOfTeams": { $size: "$teams" }
    }
  }
])
```

**Output**

```
[
  { name: 'John Doe', numberOfTeams: 3 },
  { name: 'Jane Smith', numberOfTeams: 2 },
  { name: 'Bob Johnson', numberOfTeams: 3 }
]
```

## Esempi di codice
<a name="size-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$size` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

  const result = await profiles.aggregate([
    {
      $project: {
        item: 1,
        "numberOfTeams": { $size: "$teams" }
      }
    }
  ]).toArray();

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

main();
```

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

```
from pymongo import MongoClient

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

    result = list(profiles.aggregate([
        {
            '$project': {
                'item': 1,
                'numberOfTeams': { '$size': '$teams' }
            }
        }
    ]))

    print(result)
    client.close()

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

------

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

La fase di `$sort` aggregazione ordina i documenti nella pipeline in base a valori di campo specificati. I documenti sono disposti in ordine crescente o decrescente in base ai criteri di ordinamento forniti.

**Parametri**
+ `field`: nome del campo in base al quale ordinare.
+ `order`: da utilizzare `1` per l'ordine crescente o `-1` per l'ordine decrescente.

## Esempio (MongoDB Shell)
<a name="sort-examples"></a>

L'esempio seguente dimostra l'utilizzo `$sort` dello stage per ordinare i prodotti per prezzo in ordine decrescente.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.products.aggregate([
  { $sort: { price: -1 } }
]);
```

**Output**

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

## Esempi di codice
<a name="sort-code"></a>

Per visualizzare un esempio di codice per l'utilizzo della fase di `$sort` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'operatore di `$split` aggregazione in Amazon DocumentDB viene utilizzato per suddividere una stringa in un array di sottostringhe, in base a un delimitatore specificato. Questo può essere utile per analizzare campi di stringhe complessi ed estrarre singoli componenti per un'ulteriore elaborazione.

**Parametri**
+ `string`: La stringa da dividere.
+ `delimiter`: Il carattere o la stringa usata per dividere la stringa di input.

## Esempio (MongoDB Shell)
<a name="split-examples"></a>

In questo esempio, separiamo `$split` i componenti di un campo «Desk» in un array, semplificando l'elaborazione dei dati.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

L'output di `$split` crea un array che può essere utilizzato nell'applicazione per visualizzare le informazioni per i dipendenti.

## Esempi di codice
<a name="split-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$split` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 4.0.

L'`$sqrt`operatore in Amazon DocumentDB viene utilizzato per calcolare la radice quadrata di un numero.

**Parametri**
+ `expression`: L'argomento può essere qualsiasi espressione valida purché si risolva in un numero non negativo.

## Esempio (MongoDB Shell)
<a name="sqrt-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$sqrt`operatore per calcolare la radice quadrata di un numero.

**Crea documenti di esempio**

```
db.numbers.insertMany([
  { "_id": 1, "number": 16 },
  { "_id": 2, "number": 36 },
  { "_id": 3, "number": 64 }
]);
```

**Esempio di interrogazione**

```
db.numbers.aggregate([
  { $project: {
    "_id": 1,
    "square_root": { $sqrt: "$number" }
  }}
]);
```

**Output**

```
[
  { _id: 1, square_root: 4 },
  { _id: 2, square_root: 6 },
  { _id: 3, square_root: 8 }
]
```

## Esempi di codice
<a name="sqrt-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$sqrt` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$strLenBytes`operatore in Amazon DocumentDB viene utilizzato per determinare la lunghezza di una stringa in byte. Ciò è utile quando è necessario comprendere la dimensione di archiviazione di un campo di stringa, specialmente quando si tratta di caratteri Unicode che possono utilizzare più di un byte per carattere.

**Parametri**
+ `expression`: L'espressione stringa di cui calcolare la lunghezza.

## Esempio (MongoDB Shell)
<a name="strLenBytes-examples"></a>

Questo esempio dimostra come utilizzare l'`$strLenBytes`operatore per calcolare la lunghezza dei campi di stringa in byte.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.people.aggregate([
  {
    $project: {
      "Desk": 1,
      "length": { $strLenBytes: "$Desk" }
    }
  }
])
```

**Output**

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

Si noti che la lunghezza della stringa «Düsseldorf-BVV-021" è di 19 byte, che è diversa dal numero di punti di codice (18) a causa del carattere Unicode «Ü» che occupa 2 byte.

## Esempi di codice
<a name="strLenBytes-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del comando, scegliete la scheda relativa alla `$strLenBytes` lingua che desiderate utilizzare:

------
#### [ 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>

L'`$strLenCP`operatore in Amazon DocumentDB viene utilizzato per determinare la lunghezza di un'espressione stringa in punti di codice (caratteri Unicode). Ciò è utile quando è necessario conoscere il numero di caratteri in una stringa, anziché il numero di byte.

**Parametri**
+ `expression`: L'espressione stringa per la quale restituire la lunghezza in punti di codice.

## Esempio (MongoDB Shell)
<a name="strLenCP-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$strLenCP`operatore per determinare la lunghezza delle stringhe con caratteri Unicode.

**Crea documenti di esempio**

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

**Esempio di query**

```
db.people.aggregate([
  {
    $project: {
      "Desk": 1,
      "length": { $strLenCP: "$Desk" }
    }
  }
])
```

**Output**

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

Notate la differenza nella misurazione della lunghezza per la stringa «Düsseldorf-BVV-021", che contiene un carattere Unicode (Ü). L'`$strLenCP`operatore conta correttamente il numero di caratteri Unicode, mentre conta il numero di byte. `$strLenBytes`

## Esempi di codice
<a name="strLenCP-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$strLenCP` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

Ecco un esempio di utilizzo dell'`$strLenCP`operatore in un'applicazione Node.js con il 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 ]

Ecco un esempio di utilizzo dell'`$strLenCP`operatore in un'applicazione Python con il 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>

L'`$strcasecmp`operatore in Amazon DocumentDB esegue un confronto tra due stringhe senza distinzione tra maiuscole e minuscole. Restituisce un valore intero che indica il confronto lessicografico delle due stringhe di input, ignorando le differenze tra maiuscole e minuscole.

**Parametri**
+ `string1`: la prima stringa da confrontare.
+ `string2`: La seconda stringa da confrontare.

## Esempio (MongoDB Shell)
<a name="strcasecmp-examples"></a>

Questo esempio dimostra come utilizzare l'`$strcasecmp`operatore per confrontare le stringhe di posizione della scrivania in una `people` raccolta, ignorando le differenze tra maiuscole e minuscole.

**Crea documenti di esempio**

```
db.people.insertMany([
  { "_id": 1, "Desk": "mke233-wi" },
  { "_id": 2, "Desk": "MKE233-WI" },
  { "_id": 3, "Desk": "mke233-wi" }
]);
```

**Esempio di interrogazione**

```
db.people.aggregate([
  {
    $project: {
      item: 1,
      compare: { $strcasecmp: ["$Desk", "mke233-wi"] }
    }
  }
]);
```

**Output**

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

L'output mostra che il confronto tra il `&quot;Desk&quot;` campo e la stringa viene `&quot;mke233-wi&quot;` restituito `0` per tutti e tre i documenti, a indicare che le stringhe sono uguali quando si ignorano le maiuscole e minuscole.

## Esempi di codice
<a name="strcasecmp-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$strcasecmp` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$substr`operatore in Amazon DocumentDB viene utilizzato per estrarre una sottostringa da una determinata stringa. È particolarmente utile quando è necessario definire sottostringhe basate su un intervallo di caratteri anziché su un intervallo di byte. Ciò è particolarmente importante quando si ha a che fare con stringhe Unicode, in cui il numero di byte usati per rappresentare un carattere può variare.

**Parametri**
+ `string`: La stringa di input da cui estrarre la sottostringa.
+ `start`: la posizione iniziale (a base zero) della sottostringa da estrarre. Può essere un'espressione intera non negativa.
+ `length`: il numero di caratteri nella sottostringa estratta. Può essere un'espressione intera non negativa.

## Esempio (MongoDB Shell)
<a name="substr-examples"></a>

In questo esempio, dimostreremo l'uso di `$substr` per estrarre l'abbreviazione dello stato dalla posizione della scrivania di un dipendente.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.people.aggregate([
  {
    $project: {
      "state": { $substr: ["$Desk", 12, 3] }
    }
  }
])
```

**Output**

```
{ "_id": 1, "state": "NRW" },
{ "_id": 2, "state": "HBB" },
{ "_id": 3, "state": "SHH" },
{ "_id": 4, "state": "BBB" }
```

## Esempi di codice
<a name="substr-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$substr` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$substrBytes`operatore in Amazon DocumentDB viene utilizzato per estrarre una sottostringa da una stringa in base a un intervallo di byte specificato. Questo operatore è utile quando è necessario estrarre una sottostringa da una stringa e il numero di byte necessari per rappresentare ogni carattere della stringa è importante.

Al contrario`$substrCP`, che opera sul numero di punti di codice Unicode, `$substrBytes` opera sul numero di byte necessari per rappresentare i caratteri della stringa. Ciò può essere particolarmente utile quando si lavora con stringhe che contengono caratteri non ASCII, poiché la rappresentazione di tali caratteri può richiedere più di un byte.

\$1Nota: \$1 `$substr` è obsoleto dalla versione 3.4. `$substr`è ora un alias per. `$substrBytes`

**Parametri**
+ `string`: La stringa di input da cui verrà estratta la sottostringa.
+ `startByte`: la posizione in byte iniziale a base zero della sottostringa da estrarre. È possibile utilizzare un valore negativo per specificare una posizione a partire dalla fine della stringa.
+ `length`: il numero di byte nella sottostringa da estrarre.

## Esempio (MongoDB Shell)
<a name="substrBytes-examples"></a>

In questo esempio, useremo `$substrBytes` per estrarre una sottostringa da una stringa che contiene caratteri non ASCII.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.people.aggregate([
  {
    $project: {
      "state": { $substrBytes: [ "$Desk", 12, 3] }
    }
  }
])
```

**Output**

```
{ "_id": 1, "state": "NRW" },
{ "_id": 2, "state": "HBB" },
{ "_id": 3, "state": "SHH" },
{ "_id": 4, "state": "BBB" }
```

In questo esempio, utilizziamo `$substrBytes` per estrarre una sottostringa di 3 byte a partire dal dodicesimo byte del campo. `Desk` Questo ci consente di estrarre l'abbreviazione di stato a 2 caratteri, anche se la stringa può contenere caratteri non ASCII.

## Esempi di codice
<a name="substrBytes-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$substrBytes` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$substrCP`operatore in Amazon DocumentDB viene utilizzato per estrarre una sottostringa da una stringa, in cui la sottostringa è specificata come un intervallo di punti di codice UTF-8 (CP). Questo operatore è particolarmente utile quando si lavora con stringhe Unicode, in quanto consente di estrarre sottostringhe senza doversi preoccupare della rappresentazione in byte sottostante dei caratteri.

A differenza dell'`$substrBytes`operatore, che opera sulle posizioni dei byte, l'`$substrCP`operatore lavora con le posizioni dei punti di codice. Ciò semplifica l'utilizzo di stringhe che contengono caratteri non ASCII, poiché il numero di punti di codice potrebbe non corrispondere al numero di byte o caratteri.

**Parametri**
+ `string`: La stringa di input da cui estrarre la sottostringa.
+ `start`: La posizione del punto di codice iniziale (a base zero) da cui estrarre la sottostringa.
+ `length`: il numero di punti di codice da estrarre.

## Esempio (MongoDB Shell)
<a name="substrCP-examples"></a>

In questo esempio, useremo l'`$substrCP`operatore per estrarre l'abbreviazione dello stato da una stringa contenente la posizione della scrivania del dipendente.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.people.aggregate([
  {
    $project: {
      "state": { $substrCP: ["$Desk", 25, 2] }
    }
  }
]);
```

**Output**

```
{ "_id" : 1, "state" : "MN" }
{ "_id" : 2, "state" : "LA" }
{ "_id" : 3, "state" : "CA" }
```

In questo esempio, sappiamo che l'abbreviazione dello stato inizia dal 25° punto di codice del `Desk` campo e ha una lunghezza di 2 punti di codice. Utilizzando l'`$substrCP`operatore, possiamo estrarre l'abbreviazione dello stato senza doverci preoccupare della rappresentazione in byte sottostante della stringa.

## Esempi di codice
<a name="substrCP-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$substrCP` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

In entrambi gli esempi Node.js e Python, utilizziamo l'`$substrCP`operatore per estrarre l'abbreviazione di stato dal `Desk` campo, in modo simile all'esempio MongoDB Shell.

------

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

L'`$subtract`operatore in Amazon DocumentDB viene utilizzato per sottrarre valori. Può essere usato per sottrarre date, numeri o una combinazione di entrambi. Questo operatore è utile per calcolare la differenza tra due date o per sottrarre un valore da un numero.

**Parametri**
+ `expression1`: il primo valore da sottrarre.
+ `expression2`: Il secondo valore da cui sottrarre. `<expression1>`

## Esempio (MongoDB Shell)
<a name="subtract-examples"></a>

L'esempio seguente mostra come utilizzare l'`$subtract`operatore per calcolare la differenza tra due date.

**Crea un documento di esempio**

```
db.dates.insert([
  {
  "_id": 1,
  "startDate": ISODate("2023-01-01T00:00:00Z"),
  "endDate": ISODate("2023-01-05T12:00:00Z")
  }
]);
```

**Esempio di query**

```
db.dates.aggregate([
  {
    $project: {
      _id: 1,
      durationDays: {
        $divide: [
          { $subtract: ["$endDate", "$startDate"] },
          1000 * 60 * 60 * 24  // milliseconds in a day
        ]
      }
    }
  }
]);
```

**Output**

```
[ { _id: 1, durationDays: 4.5 } ]
```

In questo esempio, l'`$subtract`operatore viene utilizzato per calcolare la differenza tra i giorni `$endDate` e `$startDate` in giorni.

## Esempi di codice
<a name="subtract-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$subtract` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$sum`operatore in Amazon DocumentDB restituisce la somma dell'espressione specificata per ogni documento in un gruppo. È un operatore di accumulazione di gruppo che viene in genere utilizzato nella fase \$1group di una pipeline di aggregazione per eseguire calcoli di sommatoria.

**Parametri**
+ `expression`: L'espressione numerica da sommare. Può essere un percorso di campo, un'espressione o una costante.

## Esempio (MongoDB Shell)
<a name="sum-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$sum`operatore per calcolare le vendite totali per ciascun prodotto.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.sales.aggregate([
  { $group: {
      _id: "$product",
      totalSales: { $sum: { $multiply: [ "$price", "$quantity" ] } }
    }}
]);
```

**Output**

```
[
  { "_id": "abc", "totalSales": 50 },
  { "_id": "xyz", "totalSales": 120 }
]
```

## Esempi di codice
<a name="sum-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$sum` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 4.0.

Non supportato dal cluster Elastic.

L'`$switch`operatore è un operatore di espressione condizionale in Amazon DocumentDB che consente di valutare un elenco di espressioni di casi e restituire il valore del primo caso che restituisce true o un valore predefinito se nessuna espressione di case è vera.

**Parametri**
+ `branches`: Una matrice di documenti, ognuno dei quali contiene un campo case che contiene l'espressione booleana da valutare e un campo then che contiene il valore da restituire se l'espressione case è vera.
+ `default`: (opzionale) Il valore da restituire se nessuna delle espressioni maiuscole è vera.

## Esempio (MongoDB Shell)
<a name="switch-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$switch`operatore per determinare il costo di spedizione di un ordine in base al totale dell'ordine.

**Crea documenti di esempio**

```
db.orders.insertMany([
  { _id: 1, total: 50 },
  { _id: 2, total: 150 },
  { _id: 3, total: 250 }
]);
```

**Esempio di query**

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

**Output**

```
[
  {
    "_id": 1,
    "total": 50,
    "shippingCost": 5
  },
  {
    "_id": 2,
    "total": 150,
    "shippingCost": 10
  },
  {
    "_id": 3,
    "total": 250,
    "shippingCost": 15
  }
]
```

## Esempi di codice
<a name="switch-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$switch` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

  const result = await collection.aggregate([
    {
      $project: {
        _id: 1,
        total: 1,
        shippingCost: {
          $switch: {
            branches: [
              { case: { $lte: ['$total', 100] }, then: 5 },
              { case: { $lte: ['$total', 200] }, then: 10 },
              { case: { $gt: ['$total', 200] }, then: 15 }
            ],
            default: 0
          }
        }
      }
    }
  ]).toArray();

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

main();
```

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

```
from pymongo import MongoClient

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

    result = list(collection.aggregate([
        {
            '$project': {
                '_id': 1,
                'total': 1,
                'shippingCost': {
                    '$switch': {
                        'branches': [
                            { 'case': { '$lte': ['$total', 100] }, 'then': 5 },
                            { 'case': { '$lte': ['$total', 200] }, 'then': 10 },
                            { 'case': { '$gt': ['$total', 200] }, 'then': 15 }
                        ],
                        'default': 0
                    }
                }
            }
        }
    ]))

    print(result)
    client.close()

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

------

# \$1 a BOOL
<a name="toBool"></a>

L'`$toBool`operatore in Amazon DocumentDB converte un'espressione in un valore booleano.

**Parametri**
+ `expression`: L'espressione da convertire in un valore booleano.

**Nota**: qualsiasi stringa viene convertita in. `true`

## Esempio (MongoDB Shell)
<a name="toBool-examples"></a>

L'esempio seguente dimostra l'utilizzo `$toBool` dell'operatore per normalizzare i valori dello stato del dispositivo da diversi tipi di dati.

**Crea documenti di esempio**

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

**Esempio di query**

```
db.deviceStates.aggregate([
  {
    $project: {
      _id: 1,
      deviceId: 1,
      isActive: { $toBool: "$status" }
    }
  }
]);
```

**Output**

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

## Esempi di codice
<a name="toBool-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$toBool` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

# \$1 fino ad oggi
<a name="toDate"></a>

Nuovo dalla versione 4.0

L'operatore di `$toDate` aggregazione in Amazon DocumentDB viene utilizzato per convertire una stringa di data o data e ora in un tipo di data BSON. Questa è l'operazione inversa dell'operatore. `$dateToString`

**Parametri**
+ `dateString`: Una rappresentazione in formato stringa di una data o di una data e ora da convertire in un tipo di data BSON.
+ `format`: (opzionale) Una stringa che specifica il formato di. `dateString` Se non viene fornito, l'operatore tenterà di analizzarli `dateString` in vari formati standard di data e ora.
+ `timezone`: (opzionale) Una stringa che rappresenta il fuso orario da utilizzare per la conversione. Se non viene fornito, viene utilizzato il fuso orario locale.

## Esempio (MongoDB Shell)
<a name="toDate-examples"></a>

L'esempio seguente mostra come utilizzare l'`$toDate`operatore per convertire una stringa di data in un tipo di data BSON.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.events.aggregate([
  {
    $project: {
      eventName: 1,
      eventTimeDate: { $toDate: "$eventTime" }
    }
  }
]);
```

**Output**

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

## Esempi di codice
<a name="toDate-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$toDate` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

  const result = await collection.aggregate([
    {
      $project: {
        eventName: 1,
        eventTimeDate: { $toDate: '$eventTime' }
      }
    }
  ]).toArray();

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

example();
```

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

```
from pymongo import MongoClient

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

    result = list(collection.aggregate([
        {
            '$project': {
                'eventName': 1,
                'eventTimeDate': { '$toDate': '$eventTime' }
            }
        }
    ]))

    print(result)
    client.close()

example()
```

------

# \$1 a Decimal
<a name="toDecimal"></a>

Nuovo dalla versione 4.0

L'`$toDecimal`operatore in Amazon DocumentDB viene utilizzato per convertire un valore nel tipo di dati Decimal128. Ciò è utile quando è necessario eseguire un'aritmetica decimale precisa o gestire valori decimali di grandi dimensioni che non possono essere rappresentati con precisione utilizzando il tipo di dati Double.

**Parametri**
+ `expression`: espressione da convertire nel tipo di dati Decimal128.

## Esempio (MongoDB Shell)
<a name="toDecimal-examples"></a>

Questo esempio dimostra come utilizzare l'`$toDecimal`operatore per convertire un valore di stringa in un tipo di dati Decimal128.

**Crea documenti di esempio**

```
db.numbers.insertOne({ _id: 1, value: "3.14" });
db.numbers.insertOne({ _id: 2, value: "2.71" });
```

**Esempio di interrogazione**

```
db.numbers.aggregate([
  { $project: {
    _id: 1,
    decimalValue: { $toDecimal: "$value" }
  }}
])
```

**Output**

```
[
  { "_id" : 1, "decimalValue" : Decimal128("3.14") },
  { "_id" : 2, "decimalValue" : Decimal128("2.71") }
]
```

## Esempi di codice
<a name="toDecimal-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$toDecimal` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

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

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

example();
```

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

```
from pymongo import MongoClient

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

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

    print(result)
    client.close()

example()
```

------

# \$1 a Double
<a name="toDouble"></a>

Nuovo dalla versione 4.0

L'`$toDouble`operatore in Amazon DocumentDB viene utilizzato per convertire un valore in un numero a virgola mobile a 64 bit a precisione doppia. Questo può essere utile quando è necessario eseguire operazioni aritmetiche su valori che originariamente non erano in formato numerico.

**Parametri**

`&lt;expression&gt;`: L'espressione da convertire in un valore doppio. Può essere qualsiasi espressione valida che si risolve in un valore numerico, di stringa o booleano.

## Esempio (MongoDB Shell)
<a name="toDouble-examples"></a>

Questo esempio dimostra come utilizzare l'`$toDouble`operatore per convertire un valore di stringa in un valore numerico allo scopo di eseguire un calcolo matematico.

**Crea documenti di esempio**

```
db.numbers.insertMany([
  { _id: 1, value: "10.5" },
  { _id: 2, value: "20.25" },
  { _id: 3, value: "7" }
])
```

**Esempio di interrogazione**

```
db.numbers.aggregate([
  {
    $project: {
      _id: 1,
      value: 1,
      double_value: { $toDouble: "$value" },
      double_plus_five: { $add: [{ $toDouble: "$value" }, 5] }
    }
  }
])
```

**Output**

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

## Esempi di codice
<a name="toDouble-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$toDouble` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

# \$1 a INT
<a name="toInt"></a>

Nuovo dalla versione 4.0

L'`$toInt`operatore in Amazon DocumentDB viene utilizzato per convertire un valore di input in un tipo di dati intero. Questo operatore è utile quando è necessario garantire che un campo o un'espressione sia rappresentato come un numero intero, il che può essere importante per determinate operazioni o attività di elaborazione dei dati.

**Parametri**
+ `expression`: L'espressione da convertire in un numero intero.

## Esempio (MongoDB Shell)
<a name="toInt-examples"></a>

L'esempio seguente mostra come utilizzare l'`$toInt`operatore per convertire un valore di stringa in un numero intero.

**Crea documenti di esempio**

```
db.numbers.insertMany([
  { "name": "one", "value": "1" },
  { "name": "hundred", "value": "100" }
]);
```

**Esempio di interrogazione**

```
db.numbers.aggregate([
  { $project: {
    "_id": 0,
    "name": 1,
    "intValue": { $toInt: "$value" }
  }}
]);
```

**Output**

```
{ "name": "one", "intValue": 1 }
{ "name": "hundred", "intValue": 100 }
```

## Esempi di codice
<a name="toInt-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$toInt` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

  const result = await collection.aggregate([
    { $project: {
      "_id": 0,
      "name": 1,
      "intValue": { $toInt: "$value" }
    }}
  ]).toArray();

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

example();
```

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

```
from pymongo import MongoClient

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

    result = list(collection.aggregate([
        { "$project": {
            "_id": 0,
            "name": 1,
            "intValue": { "$toInt": "$value" }
        }}
    ]))

    print(result)
    client.close()

example()
```

------

# \$1 a Long
<a name="toLong"></a>

Novità dalla versione 4.0

L'`$toLong`operatore in Amazon DocumentDB viene utilizzato per convertire un valore in un tipo di dati intero (lungo) a 64 bit. Questo può essere utile quando è necessario eseguire operazioni aritmetiche o confronti su valori numerici che possono essere memorizzati come stringhe o altri tipi di dati.

**Parametri**
+ `expression`: L'espressione da convertire in un numero intero a 64 bit.

## Esempio (MongoDB Shell)
<a name="toLong-examples"></a>

Questo esempio dimostra come utilizzare l'`$toLong`operatore per convertire un valore di stringa in un numero intero a 64 bit.

**Crea documenti di esempio**

```
db.numbers.insertMany([
  { _id: 1, value: "42" },
  { _id: 3, value: "9223372036854775807" }
]);
```

**Esempio di interrogazione**

```
db.numbers.aggregate([
  {
    $project: {
      _id: 1,
      longValue: { $toLong: "$value" }
    }
  }
])
```

**Output**

```
[
  { "_id" : 1, "longValue" : 42 },
  { "_id" : 3, "longValue" : 9223372036854775807 }
]
```

## Esempi di codice
<a name="toLong-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$toLong` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$toLower`operatore in Amazon DocumentDB viene utilizzato per convertire una stringa in lettere minuscole.

**Parametri**
+ `expression`: L'espressione stringa da convertire in lettere minuscole.

## Esempio (MongoDB Shell)
<a name="toLower-examples"></a>

L'esempio seguente mostra come utilizzare l'`$toLower`operatore per convertire il `Desk` campo in lettere minuscole.

**Crea documenti di esempio**

```
db.locations.insertMany([
  { "_id": 1, "Desk": "Düsseldorf-BVV-021" },
  { "_id": 2, "Desk": "Munich-HGG-32a" }
]);
```

**Esempio di interrogazione**

```
db.locations.aggregate([
  { $project: { item: { $toLower: "$Desk" } } }
]);
```

**Output**

```
{ "_id" : 1, "item" : "düsseldorf-bvv-021" }
{ "_id" : 2, "item" : "munich-hgg-32a" }
```

## Esempi di codice
<a name="toLower-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$toLower` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 4.0

L'`$toObjectId`operatore in Amazon DocumentDB viene utilizzato per convertire una rappresentazione in formato stringa di un tipo di dati ObjectId in un tipo di ObjectId dati effettivo. Questo può essere utile quando si lavora con dati che sono stati archiviati come rappresentazioni di stringhe di ObjectIds, in quanto consente di eseguire operazioni che richiedono il tipo di ObjectId dati.

**Parametri**
+ `expression`: Un'espressione stringa che rappresenta un valore valido ObjectId.

## Esempio (MongoDB Shell)
<a name="toObjectId-examples"></a>

L'esempio seguente mostra come utilizzare l'`$toObjectId`operatore per convertire una rappresentazione in formato stringa di an nel ObjectId tipo di ObjectId dati.

**Crea documenti di esempio**

```
db.employees.insertMany([
  { _id: 1, empId:"64e5f8886218c620cf0e8f8a", name: "Carol Smith", employeeId: "c720a" },
  { _id: 2, empId:"64e5f94e6218c620cf0e8f8c", name: "Bill Taylor", employeeId: "c721a" }
]);
```

**Esempio di interrogazione**

```
db.employees.aggregate([
  { $project: {
    "empIdAsObjectId": {$toObjectId: "$empId"}}
  }
]);
```

**Output**

```
[
  { _id: 1, empIdAsObjectId: ObjectId('64e5f8886218c620cf0e8f8a') },
  { _id: 2, empIdAsObjectId: ObjectId('64e5f94e6218c620cf0e8f8c') }
]
```

## Esempi di codice
<a name="toObjectId-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$toObjectId` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Nuovo dalla versione 4.0

L'`$toString`operatore in Amazon DocumentDB viene utilizzato per convertire un valore di qualsiasi tipo (ad eccezione di null) in una rappresentazione di stringa. Questo può essere utile quando è necessario eseguire operazioni sulle stringhe su valori che originariamente non erano in formato stringa.

**Parametri**
+ `expression`: L'espressione da convertire in una stringa.

## Esempio (MongoDB Shell)
<a name="toString-examples"></a>

L'esempio seguente mostra come utilizzare l'`$toString`operatore per convertire valori numerici in stringhe.

**Crea documenti di esempio**

```
db.numbers.insertMany([
  { "_id": 1, "value": 42 },
  { "_id": 2, "value": 3.14 }
]);
```

**Esempio di interrogazione**

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

**Output**

```
{ "_id": 1, "valueAsString": "42" }
{ "_id": 2, "valueAsString": "3.14" }
```

## Esempi di codice
<a name="toString-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$toString` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$toUpper`operatore in Amazon DocumentDB viene utilizzato per convertire una stringa in lettere maiuscole.

**Parametri**
+ `expression`: L'espressione stringa da convertire in lettere maiuscole.

## Esempio (MongoDB Shell)
<a name="toUpper-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$toUpper`operatore per convertire il `Desk` campo in lettere maiuscole.

**Crea documenti di esempio**

```
db.locations.insertMany([
  { "_id": 1, "Desk": "düsseldorf-bvv-021" },
  { "_id": 2, "Desk": "munich-hgg-32a" }
]);
```

**Esempio di query**

```
db.locations.aggregate([
  { $project: { item: { $toUpper: "$Desk" } } }
]);
```

**Output**

```
{ "_id" : 1, "item" : "DüSSELDORF-BVV-021" }
{ "_id" : 2, "item" : "MUNICH-HGG-32A" }
```

## Esempi di codice
<a name="toUpper-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$toUpper` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Nuovo dalla versione 4.0

L'`$trim`operatore in Amazon DocumentDB viene utilizzato per rimuovere i caratteri di and/or spaziatura iniziali finali da una stringa.

**Parametri**
+ `input`: L'espressione stringa da tagliare.
+ `chars`: (opzionale) Speciifica i caratteri da tagliare dall'inizio e dalla fine dell'input, l'impostazione predefinita è lo spazio bianco.

## Esempio (MongoDB Shell)
<a name="trim-examples"></a>

L'esempio seguente mostra come utilizzare l'`$trim`operatore per rimuovere gli spazi bianchi iniziali e finali da una stringa.

**Crea documenti di esempio**

```
db.people.insertMany([
  { "name": "   John Doe   " },
  { "name": "   Bob Johnson   " }
])
```

**Esempio di query**

```
db.people.aggregate([
  { $project: {
    "name": { $trim: {input: "$name"}}
  }}
])
```

**Output**

```
[
  { "name": "John Doe" },
  { "name": "Bob Johnson" }
]
```

## Esempi di codice
<a name="trim-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$trim` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$type` aggregazione restituisce il tipo di dati BSON di un campo specificato. Ciò è utile per identificare il tipo di dati dei valori dei campi durante le operazioni di aggregazione.

**Parametri**
+ `expression`: il campo o l'espressione di cui restituire il tipo.

## Esempio (MongoDB Shell)
<a name="type-aggregation-examples"></a>

L'esempio seguente dimostra l'utilizzo `$type` dell'operatore per identificare il tipo di dati del campo del prezzo per ciascun prodotto.

**Crea documenti di esempio**

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

**Esempio di query**

```
db.inventory.aggregate([
  {
    $project: {
      item: 1,
      price: 1,
      priceType: { $type: "$price" }
    }
  }
]);
```

**Output**

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

## Esempi di codice
<a name="type-aggregation-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$type` aggregazione, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

Novità dalla versione 8.0

Non supportato dal cluster Elastic.

La fase `$unset` di aggregazione in Amazon DocumentDB consente di rimuovere campi dai documenti.

**Parametri**
+ `expression`: nome del campo o elenco di più nomi di campo.

## Esempio (MongoDB Shell)
<a name="unset-stage-examples"></a>

L'esempio seguente dimostra l'uso della fase di `$unset` aggregazione per rimuovere il campo. `price`

**Crea documenti di esempio**

```
db.inventory.insertMany([
  { item: "pencil", quantity: 100, price: 0.24},
  { item: "pen", quantity: 204, price: 1.78 }
]);
```

**Esempio di aggregazione**

```
db.inventory.aggregate([
  {
    $unset: "price"
  }
])
```

**Output**

```
[
  {
    _id: ObjectId('69248951d66dcae121d2950d'),
    item: 'pencil',
    quantity: 100
  },
  {
    _id: ObjectId('69248951d66dcae121d2950e'),
    item: 'pen',
    quantity: 204
  }
]
```

## Esempi di codice
<a name="unset-stage-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$unset` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$unwind`operatore viene utilizzato per decostruire un campo array dai documenti di input per generare un documento per ogni elemento. Ciò può essere utile quando si desidera eseguire operazioni sui singoli elementi di un array, come filtrare, ordinare o trasformare i dati.

**Parametri**
+ `path`: il percorso del campo dell'array da srotolare.
+ `includeArrayIndex`: (opzionale) Specificate il nome del nuovo campo che contiene l'indice dell'elemento dell'array.
+ `preserveNullAndEmptyArrays`: (opzionale) Determina se l'operazione mantiene il documento originale quando il campo dell'array è nullo o è un array vuoto.

## Esempio (MongoDB Shell)
<a name="unwind-examples"></a>

L'esempio seguente dimostra come utilizzare l'`$unwind`operatore per decostruire un campo array ed eseguire ulteriori operazioni sui singoli elementi.

**Crea documenti di esempio**

```
db.people.insertMany([
  { _id: 1, name: "jon", hobbies: ["painting", "dancing", "singing"] },
  { _id: 2, name: "jane", hobbies: ["reading", "swimming"] },
  { _id: 3, name: "jack", hobbies: [] }
])
```

**Esempio di query**

```
db.people.aggregate([
  { $unwind: "$hobbies" }
])
```

**Output**

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

## Esempi di codice
<a name="unwind-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$unwind` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

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

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

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

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

example();
```

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

```
from pymongo import MongoClient

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

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

    print(result)
    client.close()

example()
```

------

# \$1 Ricerca vettoriale
<a name="vectorSearch"></a>

Nuovo dalla versione 8.0

Non supportato dal cluster Elastic.

L'`$vectorSearch`operatore in Amazon DocumentDB consente di eseguire ricerche vettoriali, un metodo utilizzato nell'apprendimento automatico per trovare punti dati simili confrontando le loro rappresentazioni vettoriali utilizzando metriche di distanza o similarità. Questa funzionalità combina la flessibilità e l'ampia gamma di interrogazioni di un database di documenti basato su JSON con la potenza della ricerca vettoriale, consentendoti di creare casi d'uso di machine learning e intelligenza artificiale generativa come la ricerca semantica, la raccomandazione di prodotti e altro ancora.

**Parametri**
+ `<exact>`(opzionale): Contrassegno che specifica se eseguire la ricerca Exact Nearest Neighbor (ENN) o Approximate Nearest Neighbor (ANN). Il valore può essere uno dei seguenti:
+ false: per eseguire una ricerca ANN
+ true - per eseguire una ricerca ENN

Se omesso o impostato su false, `numCandidates` è obbligatorio.

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

## Esempio (MongoDB Shell)
<a name="vectorSearch-examples"></a>

L'esempio seguente mostra come utilizzare l'`$vectorSearch`operatore per trovare descrizioni di prodotti simili in base alle loro rappresentazioni vettoriali.

**Crea documenti di esempio**

```
db.products.insertMany([
  {
    _id: 1,
    name: "Product A",
    description: "A high-quality, eco-friendly product for your home.",
    description_vector: [ 0.2, 0.5, 0.8 ]
  },
  {
    _id: 2,
    name: "Product B",
    description: "An innovative and modern kitchen appliance.",
    description_vector: [0.7, 0.3, 0.9]
  },
  {
    _id: 3,
    name: "Product C",
    description: "A comfortable and stylish piece of furniture.",
    description_vector: [0.1, 0.2, 0.4]
  }
]);
```

**Crea un indice di ricerca vettoriale**

```
db.runCommand(
    {
        createIndexes: "products",
        indexes: [{
            key: {
                "description_vector": "vector"
            },
            vectorOptions: {
                type: "hnsw",
                dimensions: 3,
                similarity: "cosine",
                m: 16,
                efConstruction: 64
            },
            name: "description_index"
        }]
    }
);
```

**Esempio di query**

```
db.products.aggregate([
  { $vectorSearch: {
      index: "description_index",
      limit: 2,
      numCandidates: 10,
      path: "description_vector",
      queryVector: [0.1, 0.2, 0.3]
    }
  }
]);
```

**Output**

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

## Esempi di codice
<a name="vectorSearch-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$vectorSearch` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$week`operatore in Amazon DocumentDB restituisce il numero della settimana di una data (0-53) in base allo standard ISO 8601. Il numero della settimana viene calcolato in base all'anno e al giorno della settimana, con lunedì come primo giorno della settimana.

**Parametri**

Nessuno

## Esempio (MongoDB Shell)
<a name="week-examples"></a>

L'esempio seguente mostra come utilizzare l'`$week`operatore per recuperare il numero della settimana di una determinata data.

**Crea documenti di esempio**

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

**Esempio di query**

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

**Output**

```
[
  { "_id": 1, "week": 1 },
  { "_id": 2, "week": 2 },
  { "_id": 3, "week": 53 }
]
```

## Esempi di codice
<a name="week-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$week` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$year`operatore in Amazon DocumentDB estrae il componente anno da una data o un timestamp.

**Parametri**
+ `expression`: L'espressione della data o dell'ora da cui estrarre il componente dell'anno.

## Esempio (MongoDB Shell)
<a name="year-examples"></a>

L'esempio seguente mostra come utilizzare l'`$year`operatore per estrarre il componente anno da un campo data.

**Crea documenti di esempio**

```
db.events.insertMany([
  { "_id": 1, "date": ISODate("2023-04-15T00:00:00Z") },
  { "_id": 3, "date": ISODate("2021-12-31T00:00:00Z") }
]);
```

**Esempio di interrogazione**

```
db.events.aggregate([
  { $project: { year: { $year: "$date" } } }
]);
```

**Output**

```
[
  { "_id": 1, "year": 2023 },
  { "_id": 3, "year": 2021 }
]
```

## Esempi di codice
<a name="year-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$year` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$zip`operatore in Amazon DocumentDB consente di combinare più array in un unico array di tuple (coppie chiave-valore). Ciò è utile quando è necessario creare nuovi documenti o oggetti combinando dati provenienti da diverse fonti o matrici all'interno di un documento.

**Parametri**
+ `inputs`: Una matrice di espressioni che si risolvono in matrici. Questi array verranno combinati in un unico array di tuple.
+ `useLongestLength`: (opzionale) Se`true`, l'array di output avrà la lunghezza dell'array di input più lungo, riempirà di valori gli array più corti. `null` Se`false`, l'array di output avrà la lunghezza dell'array di input più corto.
+ `defaults`: (opzionale) Un array di valori predefiniti da utilizzare per le tuple se l'array di input corrispondente è più corto dell'array di input più lungo e lo è. `useLongestLength` `true`

## Esempio (MongoDB Shell)
<a name="zip-examples"></a>

L'esempio seguente mostra come utilizzare l'`$zip`operatore per combinare due array in un unico array di tuple.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.grades.aggregate([
  {
    $project: {
      "name": 1,
      "scoredClasses": {
        $zip: {
          inputs: ["$scores", "$classes"],
          useLongestLength: true,
          defaults: [null, null]
        }
      }
    }
  }
])
```

**Output**

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

## Esempi di codice
<a name="zip-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$zip` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

# Dati geospaziali
<a name="mongo-apis-geospatial-operators"></a>

Questa sezione fornisce informazioni dettagliate sugli operatori geospaziali supportati da 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>

L'`$geometry`operatore in Amazon DocumentDB viene utilizzato per specificare un oggetto geometrico GeoJSON come parte di una query geospaziale. Questo operatore viene utilizzato insieme ad altri operatori di interrogazione geospaziali come e per eseguire query spaziali sui dati. `$geoWithin` `$geoIntersects`

In Amazon DocumentDB, l'`$geometry`operatore supporta i seguenti tipi di geometria GeoJSON:
+ Point (Punto)
+ LineString
+ Poligono
+ MultiPoint
+ MultiLineString
+ MultiPolygon
+ GeometryCollection

**Parametri**
+ `type`: Il tipo di oggetto geometrico GeoJSON, ad esempio, ecc. `Point` `Polygon`
+ `coordinates`: Un array di coordinate che rappresentano la geometria. La struttura dell'array di coordinate dipende dal tipo di geometria.

## Esempio (MongoDB Shell)
<a name="geometry-examples"></a>

L'esempio seguente dimostra come utilizzare l'`$geometry`operatore per eseguire una `$geoIntersects` query in Amazon DocumentDB.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

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

**Output**

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

## Esempi di codice
<a name="geometry-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$geometry` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$geoIntersects`operatore in Amazon DocumentDB viene utilizzato per trovare documenti i cui dati geospaziali si intersecano con un oggetto GeoJSON specificato. Questo operatore è utile per le applicazioni che richiedono l'identificazione dei documenti in base alla loro relazione spaziale con una determinata forma geografica, come un poligono o un multipoligono.

**Parametri**
+ `$geometry`: Un oggetto GeoJSON che rappresenta la forma da verificare per l'intersezione. I tipi di oggetti GeoJSON supportati `Point` sono`LineString`,, `Polygon` e. `MultiPolygon`

## Esempio (MongoDB Shell)
<a name="geoIntersects-examples"></a>

L'esempio seguente mostra come utilizzare l'`$geoIntersects`operatore per trovare il nome dello stato per un determinato set di coordinate in Amazon DocumentDB.

**Crea documenti di esempio**

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

**Esempio di query**

```
var location = [-73.965355, 40.782865];

db.states.find({
  "loc": {
    "$geoIntersects": {
      "$geometry": {
        "type": "Point",
        "coordinates": location
      }
    }
  }
}, {
  "name": 1
});
```

**Output**

```
{ "_id" : ObjectId("536b0a143004b15885c91a2c"), "name" : "New York" }
```

## Esempi di codice
<a name="geoIntersects-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$geoIntersects` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$geoWithin`operatore in Amazon DocumentDB viene utilizzato per trovare documenti i cui dati di posizione (rappresentati come oggetti GeoJSON) sono completamente contenuti all'interno di una forma specificata, come un poligono o un multipoligono. Ciò è utile per eseguire query su oggetti che si trovano all'interno di una regione geografica specifica.

**Parametri**
+ `$geometry`: Un oggetto GeoJSON che rappresenta la forma su cui eseguire la query.

## Esempio (MongoDB Shell)
<a name="geoWithin-examples"></a>

L'esempio seguente mostra come utilizzare l'`$geoWithin`operatore per trovare tutti gli aeroporti situati nello stato di New York.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
var state = db.states.findOne({"name": "New York"});

db.airports.find({
    "loc": {
        "$geoWithin": {
            "$geometry": state.loc
        }
    }
}, {
    "name": 1,
    "type": 1,
    "code": 1,
    "_id": 0
});
```

**Output**

```
[
  {
    "name": "John F. Kennedy International Airport",
    "type": "airport",
    "code": "JFK"
  },
  {
    "name": "LaGuardia Airport",
    "type": "airport",
    "code": "LGA"
  }
]
```

## Esempi di codice
<a name="geoWithin-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$geoWithin` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$maxDistance`operatore in Amazon DocumentDB viene utilizzato per specificare la distanza massima (in metri) da un punto GeoJSON entro cui i documenti devono trovarsi per essere inclusi nei risultati della query. Questo operatore viene utilizzato insieme all'operatore per eseguire interrogazioni `$nearSphere` geospaziali.

**Parametri**
+ `$maxDistance`: La distanza massima (in metri) dal punto di riferimento entro il quale i documenti devono trovarsi per essere inclusi nei risultati dell'interrogazione.

## Esempio (MongoDB Shell)
<a name="maxDistance-examples"></a>

L'esempio seguente mostra come utilizzare l'`$maxDistance`operatore in Amazon DocumentDB per trovare tutte le capitali degli stati entro 100 chilometri da Boston.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.capitals.find(
  {
    location: {
      $nearSphere: {
        $geometry: { type: "Point", coordinates: [-71.0589, 42.3601] },
        $maxDistance: 100000
      }
    }
  },
  { state: 1, city: 1, _id: 0 }
);
```

**Output**

```
[
  { "state": "Rhode Island", "city": "Providence" },
  { "state": "New Hampshire", "city": "Concord" }
]
```

## Esempi di codice
<a name="maxDistance-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$maxDistance` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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`è un operatore di ricerca utilizzato insieme `$nearSphere` o `$geoNear` per filtrare documenti che si trovano almeno alla distanza minima specificata dal punto centrale. Questo operatore è supportato in Amazon DocumentDB e funziona in modo simile alla sua controparte in MongoDB.

**Parametri**
+ `$minDistance`: La distanza minima (in metri) dal punto centrale per includere i documenti nei risultati.

## Esempio (MongoDB Shell)
<a name="minDistance-examples"></a>

In questo esempio, troveremo tutti i ristoranti entro un raggio di 2 chilometri da una località specifica a Seattle, Washington.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.usarestaurants.find({
  "location": {
    "$nearSphere": {
      "$geometry": {
        "type": "Point",
        "coordinates": [-122.3516, 47.6156]
      },
      "$minDistance": 1,
      "$maxDistance": 2000
    }
  }
}, {
  "name": 1
});
```

**Output**

```
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "name" : "Noodle House" }
{ "_id" : ObjectId("611f3da985009a81ad38e74c"), "name" : "Pike Place Grill" }
```

## Esempi di codice
<a name="minDistance-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$minDistance` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$near`operatore in Amazon DocumentDB viene utilizzato per trovare documenti geograficamente vicini a un punto specifico. Restituisce i documenti ordinati in base alla distanza, con i documenti più vicini per primi. Questo operatore richiede un indice geospaziale a due sfere ed è utile per le interrogazioni di prossimità sui dati di localizzazione.

**Parametri**
+ `$geometry`: un oggetto GeoJSON Point che definisce il punto centrale per la query Near.
+ `$maxDistance`: (opzionale) La distanza massima in metri dal punto specificato che un documento può raggiungere per corrispondere alla query.
+ `$minDistance`: (opzionale) La distanza minima in metri dal punto specificato che un documento può raggiungere per corrispondere alla query.

**Requisiti dell'indice**
+ `2dsphere index`: necessario per le interrogazioni geospaziali sui dati GeoJSON Point.

## Esempio (MongoDB Shell)
<a name="near-examples"></a>

L'esempio seguente mostra come utilizzare l'`$near`operatore per trovare i ristoranti più vicini a una località specifica a Seattle, Washington.

**Crea documenti di esempio**

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

**Crea un indice a due sfere**

```
db.usarestaurants.createIndex({ "location": "2dsphere" });
```

**Esempio di query con GeoJSON Point**

```
db.usarestaurants.find({
  location: {
    $near: {
      $geometry: {
        type: "Point",
        coordinates: [-122.3516, 47.6156]
      },
      $maxDistance: 100,
      $minDistance: 10
    }
  }
});
```

**Output**

```
{
  "_id" : ObjectId("69031ec9ea1c2922a1ce5f4a"),
  "name" : "Noodle House",
  "city" : "Seattle",
  "state" : "Washington",
  "rating" : 4.8,
  "location" : {
    "type" : "Point",
    "coordinates" : [ -122.3517, 47.6159 ]
  }
}
```

## Esempi di codice
<a name="near-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$near` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$nearSphere`operatore in Amazon DocumentDB viene utilizzato per trovare documenti che si trovano entro una distanza specificata da un punto geospaziale. Questo operatore è particolarmente utile per le interrogazioni geospaziali, ad esempio per trovare tutti i ristoranti entro un certo raggio da una determinata località.

**Parametri**
+ `$geometry`: un oggetto GeoJSON che rappresenta il punto di riferimento. Deve essere un `Point` oggetto con `type` e `coordinates` campi.
+ `$minDistance`: (opzionale) La distanza minima (in metri) dal punto di riferimento a cui devono essere i documenti.
+ `$maxDistance`: (opzionale) La distanza massima (in metri) dal punto di riferimento a cui devono essere i documenti.

## Esempio (MongoDB Shell)
<a name="nearSphere-examples"></a>

In questo esempio, troveremo tutti i ristoranti nel raggio di 2 chilometri (2000 metri) da una località specifica a Seattle, WA.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.usarestaurants.find({
  location: {
    $nearSphere: {
      $geometry: {
        type: "Point",
        coordinates: [-122.3516, 47.6156]
      },
      $minDistance: 1,
      $maxDistance: 2000
    }
  }
}, {
  name: 1
});
```

**Output**

```
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "name" : "Noodle House" }
{ "_id" : ObjectId("611f3da985009a81ad38e74c"), "name" : "Pike Place Grill" }
```

## Esempi di codice
<a name="nearSphere-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$nearSphere` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------

# Operatori di interrogazione e proiezione
<a name="mongo-apis-query-projection-operators"></a>

Questa sezione fornisce informazioni dettagliate sugli operatori di query e proiezione supportati da 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>

L'operatore di `$` proiezione limita il contenuto di un campo di matrice per restituire solo il primo elemento che corrisponde alla condizione di interrogazione. Viene utilizzato per proiettare un singolo elemento dell'array corrispondente.

**Parametri**
+ `field.$`: Il campo dell'array con l'operatore posizionale per proiettare il primo elemento corrispondente.

## Esempio (MongoDB Shell)
<a name="dollar-projection-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'operatore di `$` proiezione per restituire solo l'elemento dell'array corrispondente.

**Create documenti di esempio**

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

**Esempio di interrogazione**

```
db.students.find(
  { grades: { $gte: 90 } },
  { name: 1, "grades.$": 1 }
);
```

**Output**

```
{ "_id" : 1, "name" : "Alice", "grades" : [ 92 ] }
{ "_id" : 2, "name" : "Bob", "grades" : [ 92 ] }
{ "_id" : 3, "name" : "Charlie", "grades" : [ 95 ] }
```

In questo esempio, per ogni studente viene restituito solo il primo voto maggiore o uguale a 90.

## Esempi di codice
<a name="dollar-projection-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$` proiezione, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$all`operatore in Amazon DocumentDB viene utilizzato per abbinare documenti in cui il valore di un campo è un array e contiene tutti gli elementi specificati, indipendentemente dall'ordine degli elementi nell'array.

**Parametri**
+ `field`: il nome del campo da controllare.
+ `[value1, value2, ...]`: L'elenco dei valori da abbinare nell'array.

 

**Utilizzo `$elemMatch` all'interno di un'`$all`espressione**

Vedi [`$all`Utilizzo all'`$elemMatch`interno di un'espressione](functional-differences.md#functional-differences.elemMatch) le limitazioni relative all'uso dell'`$elemMatch`operatore all'interno di un'`$all`espressione.

 

**Dollaro (\$1) nei nomi dei campi**

Vedi le limitazioni [Dollar (\$1) e dot (.) nei nomi dei campi](functional-differences.md#functional-differences-dollardot) relative all'interrogazione di campi con `$` prefisso `$all` negli oggetti annidati.

## Esempio (MongoDB Shell)
<a name="all-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$all`operatore per recuperare documenti in cui il campo «Colori» è un array che contiene sia «Rosso» che «Blu».

**Crea documenti di esempio**

```
db.example.insertMany([
  { "Item": "Pen", "Colors": ["Red", "Blue", "Green"] },
  { "Item": "Notebook", "Colors": ["Blue", "White"] },
  { "Item": "Poster Paint", "Colors": ["Red", "Yellow", "White"] }
])
```

**Esempio di interrogazione**

```
db.example.find({ "Colors": { $all: ["Red", "Blue"] } }).pretty()
```

**Output**

```
{
  "_id" : ObjectId("6137d6c5b3a1d35e0b6ee6ad"),
  "Item" : "Pen",
  "Colors" : [ 
          "Red", 
          "Blue", 
          "Green" 
  ]
}
```

## Esempi di codice
<a name="all-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$all` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$and`operatore in Amazon DocumentDB viene utilizzato per combinare più espressioni e valutarle come un'unica condizione. Restituisce `true` se tutte le espressioni fornite restituiscono un risultato positivo `true` e in `false` altro modo. Questo operatore è utile per applicare più criteri a una query.

**Parametri**
+ `expression1`: espressione obbligatoria che restituisce un valore booleano.
+ `expression2`: espressione obbligatoria che restituisce un valore booleano.
+ `...`: espressioni obbligatorie aggiuntive che restituiscono valori booleani.

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

L'esempio seguente dimostra l'uso dell'`$and`operatore per trovare tutti i documenti nella raccolta «users» in cui il campo «age» è maggiore di 18 e il campo «status» è «attivo».

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.users.find({
  $and: [
    { age: { $gt: 18 } },
    { status: "active" }
  ]
});
```

**Output**

```
[
  { "_id" : ObjectId("614e3c4b63f5892e7c4e2345"), "name" : "John", "age" : 25, "status" : "active" },
  { "_id" : ObjectId("614e3c4b63f5892e7c4e2347"), "name" : "Alice", "age" : 22, "status" : "active" }
]
```

## Esempi di codice
<a name="and-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$and` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$bitsAllClear`operatore in Amazon DocumentDB viene utilizzato per abbinare i documenti in cui tutti i bit specificati in un campo sono cancellati (impostato su 0). Questo operatore può essere utile per eseguire operazioni bit per bit sui dati archiviati.

**Parametri**
+ `field`: Il campo per verificare che i bit specificati vengano cancellati.
+ `value`: La maschera di bit numerica che specifica quali bit devono essere controllati o un elenco di posizioni dei bit da controllare. Una maschera di bit numerica può essere in forma binaria (0b...), decimale, esadecimale (0x...), ottale (0o...) o binaria (). BinData In un elenco di posizioni di bit, la posizione del bit meno significativo è 0.

## Esempio (MongoDB Shell)
<a name="bitsAllClear-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$bitsAllClear`operatore in Amazon DocumentDB.

**Crea documenti di esempio**

```
db.collection.insertMany([
  { _id: 1, bits: 0b1010 },
  { _id: 2, bits: 0b1100 },
  { _id: 3, bits: 0b0101 }
]);
```

**Esempio di query**

```
db.collection.find({
  bits: { $bitsAllClear: 0b0011 }
})
```

**Output**

```
{ "_id" : 2, "bits" : 12 }
```

La query verifica se tutti i bit specificati dalla maschera di bit `0b0011` (i due bit meno significativi) sono cancellati nel campo. `bits` Il documento con `_id` 2 soddisfa questa condizione, poiché tali bit `bits` sono stati cancellati nel campo.

## Esempi di codice
<a name="bitsAllClear-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$bitsAllClear` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$bitsAllSet`operatore in Amazon DocumentDB viene utilizzato per eseguire query su documenti in cui uno specifico set di bit è impostato su 1 in un campo. Questo operatore consente di eseguire operazioni bit per bit sui valori dei campi e può essere utile quando è necessario controllare lo stato dei singoli bit all'interno di un valore numerico.

**Parametri**
+ `field`: il nome del campo numerico su cui eseguire l'operazione bit per bit.
+ `value`: La maschera di bit numerica che specifica quali bit devono essere controllati o un elenco di posizioni dei bit da controllare. Una maschera di bit numerica può essere in forma binaria (0b...), decimale, esadecimale (0x...), ottale (0o...) o binaria (). BinData In un elenco di posizioni di bit, la posizione del bit meno significativo è 0.

## Esempio (MongoDB Shell)
<a name="bitsAllSet-examples"></a>

L'esempio seguente mostra come utilizzare l'`$bitsAllSet`operatore per trovare documenti in cui il `flags` campo ha tutti i bit impostati dalla maschera di bit.

**Crea documenti di esempio**

```
db.collection.insert([
  { _id: 1, flags: 0b1010 },
  { _id: 2, flags: 0b1100 },
  { _id: 3, flags: 0b1110 }
])
```

**Esempio di interrogazione**

```
db.collection.find({ flags: { $bitsAllSet: 0b1100 } })
```

**Output**

```
{ "_id": 2, "flags": 12 },
{ "_id": 3, "flags": 14 }
```

In questo esempio, la query verifica la presenza di documenti in cui nel `flags` campo sono impostati tutti i bit specificati dalla maschera di bit `0b1100` (che rappresenta il valore decimale 12). I documenti con `_id` 2 e 3 soddisfano questo criterio, poiché nei valori dei `flags` campi sono impostati tutti i bit richiesti (il terzo e il quarto bit meno significativi).

## Esempi di codice
<a name="bitsAllSet-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$bitsAllSet` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$bitsAnyClear`operatore in Amazon DocumentDB viene utilizzato per abbinare i documenti in cui uno qualsiasi dei bit specificati in un campo viene cancellato (impostato su 0). Questo può essere utile per eseguire operazioni bit per bit sui valori dei campi memorizzati nei documenti.

**Parametri**
+ `field`: Il campo da controllare.
+ `value`: La maschera di bit numerica che specifica quali bit devono essere controllati o un elenco di posizioni dei bit da controllare. Una maschera di bit numerica può essere in forma binaria (0b...), decimale, esadecimale (0x...), ottale (0o...) o binaria (). BinData In un elenco di posizioni di bit, la posizione del bit meno significativo è 0.

## Esempio (MongoDB Shell)
<a name="bitsAnyClear-examples"></a>

L'esempio seguente mostra come utilizzare l'`$bitsAnyClear`operatore per verificare se qualche bit è chiaro nel `status` campo della raccolta. `items`

**Crea documenti di esempio**

```
db.items.insertMany([
  { "_id": 1, "status": 7 },
  { "_id": 2, "status": 15 },
  { "_id": 3, "status": 31 }
]);
```

**Esempio di interrogazione**

```
db.items.find({ "status": { $bitsAnyClear: 8 } })
```

**Output**

```
{ "_id" : 1, "status" : 7 }
```

In questo esempio, la query verifica la presenza di documenti in cui il `status` campo contiene dei bit chiari (0) nella maschera di bit `8` (binaria`1000`). Il documento con `status` valori di `7` (binario`111`) corrisponde alla query, in quanto contiene almeno un bit clear nella maschera di bit fornita. Il clear bit corrispondente è il quarto bit meno importante.

## Esempi di codice
<a name="bitsAnyClear-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$bitsAnyClear` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$bitsAnySet`operatore in Amazon DocumentDB viene utilizzato per interrogare documenti in cui almeno un bit è impostato su 1 nei bit specificati in un campo. Questo operatore consente di eseguire operazioni bit a bit sui valori memorizzati nei campi, permettendo l'interrogazione e l'analisi efficienti dei dati con caratteristiche bit per bit.

**Parametri**
+ `field`: il nome del campo a cui applicare l'operazione bit per bit.
+ `value`: La maschera di bit numerica che specifica quali bit devono essere controllati o un elenco di posizioni dei bit da controllare. Una maschera di bit numerica può essere in forma binaria (0b...), decimale, esadecimale (0x...), ottale (0o...) o binaria (). BinData In un elenco di posizioni di bit, la posizione del bit meno significativo è 0.

## Esempio (MongoDB Shell)
<a name="bitsAnySet-examples"></a>

L'esempio seguente mostra come utilizzare l'`$bitsAnySet`operatore per trovare documenti in cui è impostato almeno un bit nel campo. `flags`

**Crea documenti di esempio**

```
db.collection.insertMany([
  { _id: 1, flags: 0b1010 },
  { _id: 2, flags: 0b1100 },
  { _id: 3, flags: 0b0011 },
  { _id: 4, flags: 0b0100 }
]);
```

**Esempio di interrogazione**

```
db.collection.find({
  flags: { $bitsAnySet: 0b1010 }
})
```

**Output**

```
{ "_id" : 1, "flags" : 10 }
{ "_id" : 2, "flags" : 12 }
{ "_id" : 3, "flags" : 3 }
```

La query restituisce i documenti in cui almeno uno dei bit specificati nella maschera di bit `0b1010` è impostato nel `flags` campo.

## Esempi di codice
<a name="bitsAnySet-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$bitsAnySet` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$comment`operatore in Amazon DocumentDB viene utilizzato per allegare un commento a una query. Questo può essere utile per fornire contesto o informazioni aggiuntive sulla query, utili per scopi di debug o documentazione. Il commento allegato verrà visualizzato come parte dell'output di operazioni come db.currentOp ().

**Parametri**
+ `string`: Il commento allegato alla query.

## Esempio (MongoDB Shell)
<a name="comment-examples"></a>

L'esempio seguente mostra come utilizzare l'`$comment`operatore in Amazon DocumentDB.

**Crea documenti di esempio**

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

**Esempio di query**

```
db.users.find({ age: { $gt: 25 } }, { _id: 0, name: 1, age: 1 }).comment("Retrieve users older than 25");
```

**Output**

```
{ "name" : "John Doe", "age" : 30 }
{ "name" : "Bob Johnson", "age" : 35 }
```

## Esempi di codice
<a name="comment-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$comment` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$elemMatch`operatore in Amazon DocumentDB viene utilizzato per interrogare un campo array e restituire documenti in cui almeno un elemento dell'array corrisponde ai criteri specificati. Questo operatore è particolarmente utile quando si dispone di strutture di dati complesse con array annidati o documenti incorporati.

La versione 2.0 di Planner ha aggiunto il supporto per gli indici per. `$elemMatch`

**Parametri**
+ `field`: Il campo dell'array da interrogare.
+ `query`: I criteri da confrontare con gli elementi dell'array.

 

**Utilizzo `$elemMatch` all'interno di un'`$all`espressione**

Vedi [`$all`Utilizzo all'`$elemMatch`interno di un'espressione](functional-differences.md#functional-differences.elemMatch) le limitazioni relative all'uso dell'`$elemMatch`operatore all'interno di un'`$all`espressione.

## Esempio (MongoDB Shell)
<a name="elemMatch-examples"></a>

L'esempio seguente mostra come utilizzare l'`$elemMatch`operatore per trovare documenti in cui l'`parts`array ha almeno un elemento che corrisponde ai criteri specificati.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.col.find({
  parts: { "$elemMatch": { part: "xyz", qty: { $lt: 11 } } }
})
```

**Output**

```
{ "_id" : 1, "parts" : [ { "part" : "xyz", "qty" : 10 }, { "part" : "abc", "qty" : 20 } ] }
{ "_id" : 2, "parts" : [ { "part" : "xyz", "qty" : 5 }, { "part" : "abc", "qty" : 10 } ] }
```

## Esempi di codice
<a name="elemMatch-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$elemMatch` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$eq`operatore in Amazon DocumentDB viene utilizzato per abbinare documenti in cui il valore di un campo è uguale al valore specificato. Questo operatore è comunemente usato nel `find()` metodo per recuperare documenti che soddisfano i criteri specificati.

**Parametri**
+ `field`: Il campo per verificare la condizione di uguaglianza.
+ `value`: Il valore da confrontare con il campo.

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

L'esempio seguente dimostra l'utilizzo dell'`$eq`operatore per trovare tutti i documenti in cui il `name` campo è uguale a. `"Thai Curry Palace"`

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.restaurants.find({ name: { $eq: "Thai Curry Palace" } });
```

**Output**

```
{ "_id" : ObjectId("68ee586f916df9d39f3d9414"), "name" : "Thai Curry Palace", "cuisine" : "Thai", "features" : [ "Private Dining" ] }
```

## Esempi di codice
<a name="eq-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$eq` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$exists`operatore viene utilizzato per verificare se un campo esiste o meno in un documento. `$exists`particolarmente utile quando si lavora con indici sparsi in Amazon DocumentDB, dove il campo indicizzato potrebbe non essere presente in tutti i documenti.

Per utilizzare un indice Sparse creato in una query, devi utilizzare la clausola `$exists` nei campi che coprono l'indice. Se ometti`$exists`, Amazon DocumentDB non utilizzerà l'indice sparso per la query.

**Parametri**
+ `field`: il nome del campo di cui verificare l'esistenza.
+ `value`: Un valore booleano (`true`o`false`) che specifica se il campo deve esistere (`true`) o non esistere (`false`) nei documenti corrispondenti.

## Esempio (MongoDB Shell)
<a name="exists-examples"></a>

L'esempio seguente dimostra l'uso dell'`$exists`operatore con un indice sparso sul `special_diets` campo della raccolta. `food`

**Crea documenti di esempio**

```
db.food.insertMany([
  { _id: 1, name: "Apple", special_diets: ["vegetarian", "gluten-free"] },
  { _id: 2, name: "Broccoli" },
  { _id: 3, name: "Chicken", special_diets: ["dairy-free"] }
]);
```

**Crea un indice sparso nel campo `special\$1diets`**

```
db.food.createIndex({ "special_diets": 1 }, { sparse: true, name: "special_diets_sparse_asc" });
```

**Esempio di query**

```
db.food.find({ "special_diets": { $exists: true } });
```

**Output**

```
[
  { "_id" : 1, "name" : "Apple", "special_diets" : [ "vegetarian", "gluten-free" ] },
  { "_id" : 3, "name" : "Chicken", "special_diets" : [ "dairy-free" ] }
]
```

## Esempi di codice
<a name="exists-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$exists` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 4.0.

Non supportato dal cluster Elastic.

L'`$expr`operatore in Amazon DocumentDB consente di utilizzare espressioni di aggregazione all'interno del linguaggio di interrogazione. Ti consente di eseguire confronti e calcoli complessi sui campi all'interno di un documento, in modo simile a come utilizzeresti le fasi della pipeline di aggregazione.

**Parametri**
+ `expression`: espressione che restituisce un valore booleano, che consente di eseguire confronti e calcoli sui campi del documento.

## Esempio (MongoDB Shell)
<a name="expr-examples"></a>

L'esempio seguente mostra come utilizzare l'`$expr`operatore per trovare tutti i documenti in cui il `manufacturingCost` campo è maggiore del campo. `price`

**Crea documenti di esempio**

```
db.inventory.insertMany([
  { item: "abc", manufacturingCost: 500, price: 100 },
  { item: "def", manufacturingCost: 300, price: 450 },
  { item: "ghi", manufacturingCost: 400, price: 120 }
]);
```

**Esempio di interrogazione**

```
db.inventory.find({
  $expr: {
    $gt: ["$manufacturingCost", "$price"]
  }
})
```

**Output**

```
{ "_id" : ObjectId("60b9d4d68d2cac581bc5a89a"), "item" : "abc", "manufacturingCost" : 500, "price" : 100 },
{ "_id" : ObjectId("60b9d4d68d2cac581bc5a89c"), "item" : "ghi", "manufacturingCost" : 400, "price" : 120 }
```

## Esempi di codice
<a name="expr-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$expr` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$gt`operatore in Amazon DocumentDB viene utilizzato per selezionare documenti in cui il valore del campo specificato è maggiore del valore specificato. Questo operatore è utile per filtrare e interrogare i dati sulla base di confronti numerici.

**Parametri**
+ `field`: Il campo da confrontare.
+ `value`: Il valore con cui effettuare il confronto.

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

L'esempio seguente mostra come utilizzare l'`$gt`operatore per trovare tutti i documenti in cui il `age` campo è maggiore di 30.

**Crea documenti di esempio**

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

**Esempio di query**

```
db.users.find({ age: { $gt: 30 } });
```

**Output**

```
{ "_id" : ObjectId("6249e5c22a5d39884a0a0001"), "name" : "Jane", "age" : 32 },
{ "_id" : ObjectId("6249e5c22a5d39884a0a0002"), "name" : "Bob", "age" : 45 }
```

## Esempi di codice
<a name="gt-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$gt` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$gte`operatore in Amazon DocumentDB viene utilizzato per abbinare valori maggiori o uguali a un valore specificato. Questo operatore è utile per filtrare e interrogare i dati sulla base di confronti numerici.

**Parametri**
+ `field`: Il campo da confrontare con il valore fornito.
+ `value`: Il valore da confrontare con il campo.

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

L'esempio seguente dimostra l'utilizzo dell'`$gte`operatore in Amazon DocumentDB per trovare tutti i documenti in cui il campo «età» è maggiore o uguale a 25.

**Crea documenti di esempio**

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

**Esempio di query**

```
db.users.find({ age: { $gte: 25 } }, { _id: 0, name: 1, age: 1 });
```

**Output**

```
{ "name" : "Jane", "age" : 25 }
{ "name" : "Bob", "age" : 30 }
{ "name" : "Alice", "age" : 35 }
```

## Esempi di codice
<a name="gte-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$gte` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$in`operatore in Amazon DocumentDB è un operatore di interrogazione logica che consente di trovare documenti in cui il valore di un campo è uguale a uno qualsiasi dei valori specificati in un array.

**Parametri**
+ `field`: Il campo da confrontare con l'array fornito.
+ `[value1, value2, ...]`: Una matrice di valori da confrontare con il campo specificato.

 

**Dollar (`$`) nei nomi dei campi**

Vedi le limitazioni [Dollar (\$1) e dot (.) nei nomi dei campi](functional-differences.md#functional-differences-dollardot) relative all'interrogazione di campi con `$` prefisso `$in` negli oggetti annidati.

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

L'esempio seguente mostra come utilizzare l'`$in`operatore per trovare documenti in cui il `color` campo è uno dei valori nell'array fornito.

**Crea documenti di esempio**

```
db.colors.insertMany([
  { "_id": 1, "color": "red" },
  { "_id": 2, "color": "green" },
  { "_id": 3, "color": "blue" },
  { "_id": 4, "color": "yellow" },
  { "_id": 5, "color": "purple" }
])
```

**Esempio di interrogazione**

```
db.colors.find({ "color": { "$in": ["red", "blue", "purple"] } })
```

**Output**

```
{ "_id": 1, "color": "red" },
{ "_id": 3, "color": "blue" },
{ "_id": 5, "color": "purple" }
```

## Esempi di codice
<a name="in-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$in` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Novità dalla versione 4.0.

Non supportato dal cluster Elastic.

L'`$jsonSchema`operatore in Amazon DocumentDB viene utilizzato per filtrare i documenti in base a uno schema JSON specificato. Questo operatore consente di interrogare documenti che corrispondono a un particolare schema JSON, assicurando che i documenti recuperati rispettino requisiti strutturali e di tipo di dati specifici.

Utilizzando l'operatore di interrogazione di `$jsonSchema` valutazione come parte della creazione di una raccolta, è possibile convalidare lo schema dei documenti inseriti nella raccolta. [Utilizzo della convalida dello schema JSON](json-schema-validation.md)Per ulteriori informazioni, vedere.

**Parametri**
+ `required`(array): specifica i campi obbligatori nel documento.
+ `properties`(oggetto): Definisce il tipo di dati e altri vincoli per ogni campo del documento.

## Esempio (MongoDB Shell)
<a name="jsonSchema-examples"></a>

L'esempio seguente dimostra l'uso dell'`$jsonSchema`operatore per filtrare la `employees` raccolta in modo da recuperare solo i documenti che contengono `age` i campi `employeeId` e e che il `name` `employeeId` campo è di tipo. `string`

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.employees.aggregate([
  { $match: {
    $jsonSchema: {
      required: ["name", "employeeId", "age"],
      properties: { "employeeId": { "bsonType": "string" } }
    }
  }}
]);
```

**Output**

```
{ "_id" : ObjectId("6908e8b61f77fc26b2ecd26f"), "name" : { "firstName" : "Emily", "lastName" : "Brown" }, "employeeId" : "2", "age" : 25 }
```

## Esempi di codice
<a name="jsonSchema-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$jsonSchema` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$lt`operatore in Amazon DocumentDB viene utilizzato per abbinare valori inferiori al valore specificato. Questo operatore è utile per filtrare e interrogare i dati sulla base di confronti numerici.

**Parametri**
+ `field`: nome del campo da controllare.
+ `value`: Il valore con cui effettuare il confronto.

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

L'esempio seguente mostra come utilizzare l'`$lt`operatore per recuperare documenti il cui `Inventory.OnHand` valore è inferiore a 50.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.example.find({ "Inventory.OnHand": { $lt: 50 } })
```

**Output**

```
{ "_id" : 1, "Inventory" : { "OnHand" : 25, "Sold" : 60 }, "Colors" : [ "Red", "Blue" ] }
{ "_id" : 3, "Inventory" : { "OnHand" : 10, "Sold" : 85 }, "Colors" : [ "Red", "Green" ] }
```

## Esempi di codice
<a name="lt-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$lt` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$mod` interrogazione seleziona i documenti in cui un valore di campo diviso per un divisore ha un resto specificato. Ciò è utile per filtrare i documenti in base alle condizioni aritmetiche del modulo.

**Parametri**
+ `divisor`: Il numero per cui dividere.
+ `remainder`: Il valore del resto previsto.

## Esempio (MongoDB Shell)
<a name="mod-query-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$mod`operatore per trovare tutti gli ordini in cui la quantità è un numero dispari.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.orders.find({ quantity: { $mod: [2, 1] } });
```

**Output**

```
{ "_id" : 1, "item" : "Widget", "quantity" : 15 }
{ "_id" : 3, "item" : "Tool", "quantity" : 7 }
{ "_id" : 5, "item" : "Part", "quantity" : 9 }
```

Questa query restituisce documenti in cui la quantità divisa per 2 ha un resto di 1, selezionando efficacemente tutte le quantità dispari.

## Esempi di codice
<a name="mod-query-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$mod` query, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$lte`operatore in Amazon DocumentDB viene utilizzato per abbinare documenti in cui il valore di un campo specificato è inferiore o uguale al valore specificato. Questo operatore è utile per filtrare e interrogare i dati sulla base di confronti numerici.

**Parametri**
+ `field`: Il campo da confrontare.
+ `value`: Il valore con cui effettuare il confronto.

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

L'esempio seguente dimostra l'utilizzo dell'`$lte`operatore per recuperare documenti in cui il `quantity` campo è inferiore o uguale a 10.

**Crea documenti di esempio**

```
db.inventory.insertMany([
  { item: "canvas", qty: 100 },
  { item: "paint", qty: 50 },
  { item: "brush", qty: 10 },
  { item: "paper", qty: 5 }
]);
```

**Esempio di interrogazione**

```
db.inventory.find({ qty: { $lte: 10 } });
```

**Output**

```
{ "_id" : ObjectId("..."), "item" : "brush", "qty" : 10 },
{ "_id" : ObjectId("..."), "item" : "paper", "qty" : 5 }
```

## Esempi di codice
<a name="lte-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$lte` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$meta`operatore viene utilizzato per accedere ai metadati associati all'esecuzione corrente della query. Questo operatore viene utilizzato principalmente per le operazioni di ricerca di testo, in cui i metadati possono fornire informazioni sulla pertinenza dei documenti corrispondenti.

**Parametri**
+ `textScore`: recupera il punteggio di ricerca testuale per il documento. Questo punteggio indica la pertinenza del documento rispetto alla query di ricerca testuale.

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

L'esempio seguente mostra come utilizzare l'`$meta`operatore per recuperare il punteggio di ricerca testuale per i documenti che corrispondono a una query di ricerca testuale.

**Crea documenti di esempio**

```
db.documents.insertMany([
  { _id: 1, title: "Coffee Basics", content: "Coffee is a popular beverage made from roasted coffee beans." },
  { _id: 2, title: "Coffee Culture", content: "Coffee coffee coffee - the ultimate guide to coffee brewing and coffee preparation." },
  { _id: 3, title: "Tea vs Coffee", content: "Many people prefer tea over coffee for its health benefits." }
]);
```

**Crea un indice di testo**

```
db.documents.createIndex({ content: "text" });
```

**Esempio di query**

```
db.documents.find(
  { $text: { $search: "coffee" } },
  { _id: 0, title: 1, content: 1, score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } });
```

**Output**

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

## Esempi di codice
<a name="meta-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$meta` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$ne`operatore viene utilizzato per abbinare documenti in cui il valore di un campo non è uguale al valore specificato. È un operatore di confronto che può essere utilizzato nei predicati di interrogazione per filtrare i documenti.

La versione 2.0 di Planner ha aggiunto il supporto per gli indici per. `$ne`

**Parametri**
+ `field`: Il campo da controllare.
+ `value`: Il valore da confrontare.

## Esempio (MongoDB Shell)
<a name="ne-examples"></a>

In questo esempio, troveremo tutti i documenti della `users` raccolta in cui il `status` campo non è uguale a. `"active"`

**Crea documenti di esempio**

```
db.users.insertMany([
  { name: "John", status: "active" },
  { name: "Jane", status: "inactive" },
  { name: "Bob", status: "suspended" },
  { name: "Alice", status: "active" }
]);
```

**Esempio di interrogazione**

```
db.users.find({ status: { $ne: "active" } });
```

**Output**

```
[
  {
    _id: ObjectId('...'),
    name: 'Jane',
    status: 'inactive'
  },
  {
    _id: ObjectId('...'),
    name: 'Bob',
    status: 'suspended'
  }
]
```

## Esempi di codice
<a name="ne-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$ne` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$nin`operatore viene utilizzato per abbinare valori che non sono presenti nell'array specificato. È l'inverso dell'`$in`operatore, che corrisponde ai valori presenti nell'array specificato.

La versione 2.0 di Planner ha aggiunto il supporto per gli indici per. `$nin`

**Parametri**
+ `field`: Il campo da controllare.
+ `array`: La matrice di valori da confrontare.

 

**Dollar (`$`) nei nomi dei campi**

Vedi le limitazioni [Dollar (\$1) e dot (.) nei nomi dei campi](functional-differences.md#functional-differences-dollardot) relative all'interrogazione di campi con `$` prefisso `$nin` negli oggetti annidati.

## Esempio (MongoDB Shell)
<a name="nin-examples"></a>

L'esempio seguente mostra come utilizzare l'`$nin`operatore per trovare documenti in cui il `category` campo non è uguale a «Fiction» o «Mystery».

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.books.find({
  category: {
    $nin: ["Fiction", "Mystery"]
  }
})
```

**Output**

```
[
  {
    _id: ObjectId('...'),
    title: 'The Martian',
    author: 'Andy Weir',
    category: 'Science Fiction'
  },
  {
    _id: ObjectId('...'),
    title: 'The Alchemist',
    author: 'Paulo Coelho',
    category: 'Philosophy'
  }
]
```

## Esempi di codice
<a name="nin-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$nin` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$nor`operatore viene utilizzato per abbinare documenti in cui nessuna delle condizioni di interrogazione specificate è vera. È simile all'operazione logica «NOR», in cui il risultato è vero se nessuno degli operandi è vero.

**Parametri**
+ `expression1`: La prima espressione da valutare.
+ `expression2`: La seconda espressione da valutare.
+ `expressionN`: espressioni aggiuntive da valutare.

## Esempio (MongoDB Shell)
<a name="nor-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$nor`operatore recuperando documenti in cui il `qty` campo non è inferiore a 20 e il `size` campo non è uguale a «XL».

**Crea documenti di esempio**

```
db.items.insertMany([
  { qty: 10, size: "M" },
  { qty: 15, size: "XL" },
  { qty: 25, size: "L" },
  { qty: 30, size: "XL" }
])
```

**Esempio di interrogazione**

```
db.items.find({
  $nor: [
    { qty: { $lt: 20 } },
    { size: "XL" }
  ]
})
```

**Output**

```
[
  { "_id" : ObjectId("..."), "qty" : 25, "size" : "L" }
]
```

## Esempi di codice
<a name="nor-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$nor` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$not`operatore viene utilizzato per negare il risultato di una determinata espressione. Consente di selezionare documenti in cui la condizione specificata non corrisponde.

La versione 2.0 di Planner ha aggiunto il supporto degli indici per `$not {eq}` e`$not {in}`.

**Parametri**
+ `expression`: L'espressione da negare.

## Esempio (MongoDB Shell)
<a name="not-examples"></a>

L'esempio seguente mostra come utilizzare l'`$not`operatore per trovare documenti in cui il `status` campo non è uguale a «attivo».

**Crea documenti di esempio**

```
db.users.insertMany([
  { name: "John", status: "active" },
  { name: "Jane", status: "inactive" },
  { name: "Bob", status: "pending" },
  { name: "Alice", status: "active" }
]);
```

**Esempio di query**

```
db.users.find({ status: { $not: { $eq: "active" } } });
```

**Output**

```
[
  {
    _id: ObjectId('...'),
    name: 'Jane',
    status: 'inactive'
  },
  {
    _id: ObjectId('...'),
    name: 'Bob',
    status: 'pending'
  }
]
```

## Esempi di codice
<a name="not-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$not` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$or`operatore viene utilizzato per eseguire un'operazione OR logica su una matrice di due o più espressioni. Restituisce documenti che corrispondono ad almeno una delle espressioni. Questo operatore è utile quando è necessario ricercare documenti che soddisfino una o più condizioni.

**Parametri**
+ `expression1`: La prima espressione da valutare.
+ `expression2`: La seconda espressione da valutare.
+ `...`: espressioni aggiuntive da valutare (opzionale).

## Esempio (MongoDB Shell)
<a name="or-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$or`operatore per trovare documenti in cui `make` è "" con il modello «Heavy TruckForYou H1" o" "con il modello «Bolid SportForYou 1".

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.cars.find({
  $or: [
    { make: "TruckForYou", model: "Heavy H1" },
    { make: "SportForYou", model: "Bolid 1" }
  ]
});
```

**Output**

```
[
  {
    _id: ObjectId('...'),
    make: 'TruckForYou',
    model: 'Heavy H1',
    year: 2020
  },
  {
    _id: ObjectId('...'),
    make: 'SportForYou',
    model: 'Bolid 1',
    year: 2021
  }
]
```

## Esempi di codice
<a name="or-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$or` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$regex`operatore consente di eseguire la corrispondenza delle espressioni regolari nei campi stringa. È un potente strumento per la ricerca e il filtraggio di documenti in base a modelli complessi.

**Parametri**
+ `regular expression`: Il modello di espressione regolare da confrontare con il campo.
+ `$options`: (opzionale) Fornisce opzioni per modificare il comportamento di ricerca, ad esempio la distinzione tra maiuscole e minuscole, la corrispondenza globale, ecc.

## Esempio (MongoDB Shell)
<a name="regex-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$regex`operatore per cercare documenti in cui il campo «nome» corrisponde a uno schema specifico.

**Crea documenti di esempio**

```
db.users.insertMany([
  { name: "John Doe" },
  { name: "Jane Smith" },
  { name: "Alice Johnson" },
  { name: "Bob Williams" },
  { name: "Charlie Davis" }
]);
```

**Esempio di query**

```
db.users.find({ name: { $regex: /^A/ } })
```

**Output**

```
[
  { "_id" : ObjectId("..."), "name" : "Alice Johnson" }
]
```

Questa query restituirà tutti i documenti in cui il campo «nome» inizia con la lettera «A».

## Esempi di codice
<a name="regex-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$regex` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'operatore di `$slice` proiezione limita il numero di elementi dell'array restituiti nei risultati di una query. Consente di recuperare un numero specifico di elementi dall'inizio o dalla fine di un campo dell'array senza caricare l'intero array.

**Parametri**
+ `field`: il campo dell'array da proiettare.
+ `count`: numero di elementi da restituire. I valori positivi restituiscono gli elementi dall'inizio, i valori negativi dalla fine.

## Esempio (MongoDB Shell)
<a name="slice-projection-examples"></a>

L'esempio seguente mostra come utilizzare l'operatore di `$slice` proiezione per restituire solo i primi due elementi da un campo di matrice.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.inventory.find(
  {},
  { item: 1, tags: { $slice: 2 } }
)
```

**Output**

```
{ "_id" : 1, "item" : "notebook", "tags" : [ "office", "school" ] }
{ "_id" : 2, "item" : "pen", "tags" : [ "office", "writing" ] }
{ "_id" : 3, "item" : "folder", "tags" : [ "office", "supplies" ] }
```

## Esempi di codice
<a name="slice-projection-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$slice` proiezione, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore di `$size` interrogazione corrisponde ai documenti in cui un campo array contiene esattamente il numero di elementi specificato. Questo è utile per filtrare i documenti in base alla lunghezza dell'array.

**Parametri**
+ `field`: Il campo dell'array da controllare.
+ `count`: Il numero esatto di elementi che l'array deve contenere.

## Esempio (MongoDB Shell)
<a name="size-query-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$size`operatore per trovare tutti i prodotti che hanno esattamente tre tag.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.products.find({ tags: { $size: 3 } });
```

**Output**

```
{ "_id" : 1, "name" : "Laptop", "tags" : [ "electronics", "computers", "portable" ] }
{ "_id" : 3, "name" : "Desk", "tags" : [ "furniture", "office", "workspace" ] }
```

## Esempi di codice
<a name="size-query-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore di `$size` query, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$text`operatore viene utilizzato per eseguire ricerche di testo completo su campi indicizzati di testo all'interno di una raccolta di documenti. Questo operatore consente di cercare documenti che contengono parole o frasi specifiche e può essere combinato con altri operatori di query per filtrare i risultati in base a criteri aggiuntivi.

**Parametri**
+ `$search`: La stringa di testo da cercare.

## Esempio (MongoDB Shell)
<a name="text-examples"></a>

L'esempio seguente mostra come utilizzare l'`$text`operatore per cercare documenti contenenti la parola «interesse» e filtrare i risultati in base a un campo «star\$1rating».

**Crea documenti di esempio**

```
db.test.insertMany([
  { "_id": 1, "star_rating": 4, "comments": "apple is red" },
  { "_id": 2, "star_rating": 5, "comments": "pie is delicious" },
  { "_id": 3, "star_rating": 3, "comments": "apples, oranges - healthy fruit" },
  { "_id": 4, "star_rating": 2, "comments": "bake the apple pie in the oven" },
  { "_id": 5, "star_rating": 5, "comments": "interesting couch" },
  { "_id": 6, "star_rating": 5, "comments": "interested in couch for sale, year 2022" }
]);
```

**Crea un indice di testo**

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

**Esempio di query**

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

**Output**

```
{ "_id" : 5, "star_rating" : 5, "comments" : "interesting couch" }
{ "_id" : 6, "star_rating" : 5, "comments" : "interested in couch for sale, year 2022" }
```

Il comando precedente restituisce documenti con un campo indicizzato in testo contenente qualsiasi forma di «interesse» e un «star\$1rating» pari a 5.

## Esempi di codice
<a name="text-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$text` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$type`operatore viene utilizzato per controllare il tipo di dati di un campo in un documento. Può essere utilizzato quando sono necessarie operazioni o convalide specifiche per tipo. L'`$type`operatore restituisce il tipo BSON dell'espressione valutata. Il tipo restituito è una stringa, che corrisponde al tipo di campo o espressione.

La versione 2.0 di Planner ha aggiunto il supporto per gli indici per`$type`.

**Parametri**
+ `expression`: L'espressione da valutare.

## Esempio (MongoDB Shell)
<a name="type-examples"></a>

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.documents.find({
  $or: [
    { age: { $type: "number" } },
    { email: { $type: "string" } },
    { name: { $type: "string" } }
  ]
})
```

**Output**

```
[
  { "_id": 1, "name": "John", "age": 30, "email": "john@example.com" },
  { "_id": 2, "name": "Jane", "age": "25", "email": 123456 }
]
```

Questa query restituirà i documenti in cui il `age` campo è di tipo «numero», il `email` campo è di tipo «stringa» e il `name` campo è di tipo «stringa».

## Esempi di codice
<a name="type-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$type` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

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

------

# Aggiorna operatori
<a name="mongo-apis-update-operators"></a>

Questa sezione fornisce informazioni dettagliate sugli operatori di aggiornamento supportati da 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>

L'operatore `$` posizionale aggiorna il primo elemento dell'array che corrisponde alla condizione di interrogazione. Funge da segnaposto per la posizione dell'elemento dell'array corrispondente.

**Parametri**
+ `field.$`: Il campo dell'array con l'operatore posizionale per aggiornare il primo elemento corrispondente.

## Esempio (MongoDB Shell)
<a name="dollar-update-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'operatore `$` posizionale per aggiornare un elemento specifico dell'array.

**Crea documenti di esempio**

```
db.inventory.insertMany([
  { _id: 1, item: "Widget", quantities: [10, 20, 30] },
  { _id: 2, item: "Gadget", quantities: [5, 15, 25] }
]);
```

**Esempio di interrogazione**

```
db.inventory.updateOne(
  { _id: 1, quantities: 20 },
  { $set: { "quantities.$": 22 } }
);
```

**Output**

```
{
  "_id" : 1,
  "item" : "Widget",
  "quantities" : [ 10, 22, 30 ]
}
```

## Esempi di codice
<a name="dollar-update-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore `$` posizionale, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'operatore `$[]` all posizionale aggiorna tutti gli elementi di un array. Viene utilizzato quando è necessario modificare ogni elemento in un campo dell'array.

**Parametri**
+ `field.$[]`: Il campo array con l'operatore all-posizionale per aggiornare tutti gli elementi.

## Esempio (MongoDB Shell)
<a name="dollarBrackets-update-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$[]`operatore per aggiornare tutti gli elementi dell'array.

**Crea documenti di esempio**

```
db.products.insertOne({
  _id: 1,
  name: "Laptop",
  prices: [1000, 1100, 1200]
});
```

**Esempio di query**

```
db.products.updateOne(
  { _id: 1 },
  { $inc: { "prices.$[]": 50 } }
);
```

**Output**

```
{
  "_id" : 1,
  "name" : "Laptop",
  "prices" : [ 1050, 1150, 1250 ]
}
```

## Esempi di codice
<a name="dollarBrackets-update-code"></a>

Per visualizzare un esempio di codice per l'utilizzo `$[]` dell'operatore, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'operatore posizionale `$[<identifier>]` filtrato aggiorna tutti gli elementi dell'array che corrispondono alle condizioni di filtro specificate. Viene utilizzato con l'`arrayFilters`opzione di aggiornare selettivamente gli elementi dell'array.

**Parametri**
+ `field.$[identifier]`: Il campo dell'array con l'operatore posizionale filtrato.
+ `arrayFilters`: una serie di condizioni di filtro che determinano gli elementi da aggiornare.

## Esempio (MongoDB Shell)
<a name="dollarIdentifier-update-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$[<identifier>]`operatore per aggiornare elementi specifici dell'array in base a una condizione.

**Crea documenti di esempio**

```
db.students.insertOne({
  _id: 1,
  name: "Alice",
  grades: [
    { subject: "Math", score: 85 },
    { subject: "Science", score: 92 },
    { subject: "History", score: 78 }
  ]
});
```

**Esempio di interrogazione**

```
db.students.updateOne(
  { _id: 1 },
  { $inc: { "grades.$[elem].score": 5 } },
  { arrayFilters: [{ "elem.score": { $gte: 80 } }] }
);
```

**Output**

```
{
  "_id" : 1,
  "name" : "Alice",
  "grades" : [
    { "subject" : "Math", "score" : 90 },
    { "subject" : "Science", "score" : 97 },
    { "subject" : "History", "score" : 78 }
  ]
}
```

## Esempi di codice
<a name="dollarIdentifier-update-code"></a>

Per visualizzare un esempio di codice per l'utilizzo `$[<identifier>]` dell'operatore, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$addToSet`operatore in Amazon DocumentDB viene utilizzato per aggiungere un valore a un array solo se il valore non è già presente nell'array. Ciò è utile per garantire che un array contenga elementi unici.

**Parametri**
+ `field`: Il campo da aggiornare.
+ `value`: Il valore da aggiungere al campo dell'array. Può essere un singolo valore o un'espressione.

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

L'esempio seguente mostra come utilizzare l'`$addToSet`operatore per aggiungere elementi unici a un array.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.products.update(
  { "item": "apple" },
  { $addToSet: { "tags": "green" } }
)
```

**Output**

```
{ "_id": 1, "item": "apple", "tags": ["fruit", "red", "round", "green"] }
```

In questo esempio, l'`$addToSet`operatore aggiunge il tag «verde» all'array «tags» del documento in cui il campo «item» è «apple». Poiché «green» non era già presente nell'array, è stato aggiunto.

## Esempi di codice
<a name="addToSet-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$addToSet` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$bit`operatore in Amazon DocumentDB consente di eseguire operazioni bit per bit sui bit di un determinato campo. Questo può essere utile per attività come l'impostazione, la cancellazione o il controllo dello stato dei singoli bit all'interno di un numero.

**Parametri**
+ `field`: Il campo su cui eseguire operazioni bit per bit.
+ `and`: Un valore intero utilizzato per eseguire un'operazione AND bit per bit sul campo.
+ `or`: un valore intero utilizzato per eseguire un'operazione OR bit per bit sul campo.
+ `xor`: Un valore intero utilizzato per eseguire un'operazione XOR bit per bit sul campo.

## Esempio (MongoDB Shell)
<a name="bit-examples"></a>

L'esempio seguente mostra come utilizzare l'`$bit`operatore per eseguire operazioni bit per bit su un campo numerico.

**Crea documenti di esempio**

```
db.numbers.insert([
  { "_id": 1, "number": 5 },
  { "_id": 2, "number": 12 }
])
```

**Esempio di interrogazione**

```
db.numbers.update(
  { "_id": 1 },
  { "$bit": { "number": { "and": 3 } } }
)
```

**Output**

```
{
  "_id": 1,
  "number": 1
}
```

In questo esempio, l'`$bit`operatore viene utilizzato per eseguire un'operazione AND bit per bit sul campo «numero» del documento con il valore `_id` di 1. Il risultato è che il valore del campo «numero» è impostato su 1, che è il risultato dell'operazione AND bit per bit tra il valore originale di 5 e il valore 3.

## Esempi di codice
<a name="bit-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$bit` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$currentDate`operatore viene utilizzato per impostare il valore di un campo sulla data e l'ora correnti. Questo operatore è utile per aggiornare automaticamente un campo con il timestamp corrente quando un documento viene inserito o aggiornato.

**Parametri**
+ `field`: Il campo da aggiornare con la data e l'ora correnti.
+ `type`: (opzionale) Specificate il tipo BSON da utilizzare per la data corrente. Può essere `date` o `timestamp`.

## Esempio (MongoDB Shell)
<a name="currentDate-examples"></a>

L'esempio seguente mostra come utilizzare l'`$currentDate`operatore per impostare il `lastModified` campo sulla data e l'ora correnti quando viene inserito un nuovo documento.

**Crea documenti di esempio**

```
db.users.insert({
  name: "John Doe",
  email: "john.doe@example.com"
})
```

**Esempio di query**

```
db.users.updateOne(
  { name: "John Doe" },
  { $currentDate: { lastModified: true } }
)
```

**Visualizza il documento aggiornato**

```
db.users.findOne({ name: "John Doe" })
```

**Output**

```
{
  _id: ObjectId('...'),
  name: 'John Doe',
  email: 'john.doe@example.com',
  lastModified: ISODate('2025-10-25T22:50:29.963Z')
}
```

## Esempi di codice
<a name="currentDate-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$currentDate` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$each`operatore viene utilizzato insieme ad altri operatori di aggiornamento, come `$push` e`$addToSet`, per aggiungere più valori a un campo di matrice. Consente di aggiungere più elementi a un array in un'unica operazione, anziché dover eseguire più operazioni di aggiornamento.

**Parametri**
+ `value`: La matrice di valori da aggiungere al campo dell'array.

## Esempio (MongoDB Shell)
<a name="each-examples"></a>

L'esempio seguente dimostra l'utilizzo `$each` dell'operatore con l'`$push`operatore per aggiungere più elementi a un campo di matrice.

**Crea documenti di esempio**

```
db.fruits.insertOne({
  _id: 1,
  fruits: ["apple", "banana"]
})
```

**Esempio di query**

```
db.fruits.updateOne(
  { _id: 1 },
  { $push: { fruits: { $each: ["cherry", "durian", "elderberry"] } } }
)
```

**Visualizza il documento aggiornato**

```
db.fruits.findOne({ _id: 1 })
```

**Output**

```
{
  _id: 1,
  fruits: [ 'apple', 'banana', 'cherry', 'durian', 'elderberry' ]
}
```

## Esempi di codice
<a name="each-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$each` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$inc`operatore viene utilizzato per incrementare il valore di un campo di un importo specificato. Viene utilizzato per aggiornare un campo numerico, ad esempio un contatore o una valutazione, senza dover recuperare il valore corrente, calcolare il nuovo valore e quindi aggiornare il campo.

**Parametri**
+ `field`: nome del campo da incrementare.
+ `amount`: La quantità di cui incrementare il campo. Può essere un valore positivo o negativo.

## Esempio (MongoDB Shell)
<a name="inc-examples"></a>

L'esempio seguente mostra come utilizzare l'`$inc`operatore per incrementare il `age` campo di un documento.

**Crea documenti di esempio**

```
db.users.insertOne({_id: 123, name: "John Doe", age: 30})
```

**Esempio di interrogazione**

```
db.users.updateOne({_id: 123}, {$inc: {age: 1}})
```

**Visualizza il documento aggiornato**

```
db.users.findOne({_id: 123})
```

**Output**

```
{ "_id" : 123, "name" : "John Doe", "age" : 31 }
```

## Esempi di codice
<a name="inc-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$inc` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'operatore `$max` update aggiorna il valore di un campo solo se il valore specificato è maggiore del valore del campo corrente. Questo operatore è utile per mantenere i valori massimi tra gli aggiornamenti.

**Parametri**
+ `field`: Il campo da aggiornare.
+ `value`: Il valore da confrontare con il valore del campo corrente.

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

L'esempio seguente dimostra l'utilizzo `$max` dell'operatore per aggiornare il punteggio più alto registrato per un giocatore.

**Crea documenti di esempio**

```
db.scores.insertMany([
  { _id: 1, player: "Alice", highScore: 85 },
  { _id: 2, player: "Bob", highScore: 92 },
  { _id: 3, player: "Charlie", highScore: 78 }
])
```

**Esempio di aggiornamento**

```
db.scores.updateOne(
  { _id: 1 },
  { $max: { highScore: 95 } }
)
```

**Risultato**

Il `highScore` campo per Alice viene aggiornato a 95 perché 95 è maggiore del valore corrente di 85.

```
{ "_id": 1, "player": "Alice", "highScore": 95 }
```

## Esempi di codice
<a name="max-update-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$max` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'operatore `$min` update aggiorna il valore di un campo solo se il valore specificato è inferiore al valore del campo corrente. Questo operatore è utile per mantenere i valori minimi tra gli aggiornamenti.

**Parametri**
+ `field`: Il campo da aggiornare.
+ `value`: Il valore da confrontare con il valore del campo corrente.

## Esempio (MongoDB Shell)
<a name="min-update-examples"></a>

L'esempio seguente dimostra l'utilizzo `$min` dell'operatore per aggiornare la temperatura più bassa registrata per una stazione meteorologica.

**Crea documenti di esempio**

```
db.weather.insertMany([
  { _id: 1, station: "Station A", lowestTemp: 15 },
  { _id: 2, station: "Station B", lowestTemp: 20 },
  { _id: 3, station: "Station C", lowestTemp: 18 }
])
```

**Esempio di aggiornamento**

```
db.weather.updateOne(
  { _id: 1 },
  { $min: { lowestTemp: 12 } }
)
```

**Risultato**

Il `lowestTemp` campo per la stazione A viene aggiornato a 12 perché 12 è inferiore al valore corrente di 15.

```
{ "_id": 1, "station": "Station A", "lowestTemp": 12 }
```

## Esempi di codice
<a name="min-update-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$min` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$mul`operatore in Amazon DocumentDB viene utilizzato per moltiplicare il valore di un campo per un numero specificato. Ciò può essere utile per aggiornare più documenti in modo atomico e coerente, ad esempio per aggiornare le miglia di volo in base allo stato di una carta di credito.

**Parametri**
+ `field`: Il campo da moltiplicare.
+ `multiplier`: Il numero per cui moltiplicare il valore del campo.

## Esempio (MongoDB Shell)
<a name="mul-examples"></a>

Questo esempio dimostra come utilizzare l'`$mul`operatore per raddoppiare il `flight_miles` valore di tutti i documenti in cui si trova il `credit_card` campo. `true`

**Crea documenti di esempio**

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

**Esempio di query**

```
db.miles.update(
  { "credit_card": { "$eq": true } },
  { "$mul": { "flight_miles.$[]": NumberInt(2) } },
  { "multi": true }
);
```

**Output**

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

Per i clienti che dispongono di una carta di credito, le miglia di volo sono state raddoppiate.

L'operatore di matrice `$[]` posizionale viene utilizzato per applicare l'`$mul`operazione a ciascun elemento dell'array. `flight_miles`

## Esempi di codice
<a name="mul-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$mul` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$pop`operatore in Amazon DocumentDB viene utilizzato per rimuovere il primo o l'ultimo elemento da un campo array. È particolarmente utile quando è necessario mantenere un array a dimensione fissa o implementare una struttura di dati simile a una coda all'interno di un documento.

**Parametri**
+ `field`: il nome del campo dell'array da cui rimuovere un elemento.
+ `value`: un valore intero che determina la posizione dell'elemento da rimuovere. Un valore di `1` rimuove l'ultimo elemento, mentre un valore di `-1` rimuove il primo elemento.

## Esempio (MongoDB Shell)
<a name="pop-examples"></a>

Questo esempio dimostra come utilizzare l'`$pop`operatore per rimuovere il primo e l'ultimo elemento da un campo di matrice.

**Crea documenti di esempio**

```
db.users.insertMany([
  { "_id": 1, "name": "John Doe", "hobbies": ["reading", "swimming", "hiking"] },
  { "_id": 2, "name": "Jane Smith", "hobbies": ["cooking", "gardening", "painting"] }
])
```

**Esempio di interrogazione**

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

**Output**

```
{ "_id" : 1, "name" : "John Doe", "hobbies" : [ "swimming", "hiking" ] }
{ "_id" : 2, "name" : "Jane Smith", "hobbies" : [ "cooking", "gardening" ] }
```

## Esempi di codice
<a name="pop-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$pop` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Il `$position` modificatore in Amazon DocumentDB specifica la posizione nell'array in cui l'operatore inserisce `$push` gli elementi. Senza il `$position` modificatore, l'`$push`operatore inserisce gli elementi alla fine dell'array.

**Parametri**
+ `field`: il campo dell'array da aggiornare.
+ `num`: la posizione nell'array in cui gli elementi devono essere inseriti, in base all'indicizzazione a base zero.

**Nota**: per utilizzare il `$position` modificatore, deve apparire insieme al modificatore. `$each`

## Esempio (MongoDB Shell)
<a name="position-examples"></a>

L'esempio seguente dimostra come utilizzare l'`$position`operatore per inserire attività in posizioni specifiche in un sistema di gestione dei progetti.

**Crea documenti di esempio**

```
db.projects.insertOne({ "_id": 1, "name": "Website Redesign", "tasks": ["Design mockups"] })
```

**Esempio di query 1: aggiungi attività urgenti all'inizio**

```
db.projects.updateOne(
   { _id: 1 },
   {
     $push: {
        tasks: {
           $each: ["Security audit", "Performance review"],
           $position: 0
        }
     }
   }
)
```

**Uscita 1**

```
{ "_id": 1, "name": "Website Redesign", "tasks": ["Security audit", "Performance review", "Design mockups"] }
```

**Esempio di query 2: aggiungere attività in una posizione specifica**

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

**Output 2**

```
{ "_id": 2, "name": "Mobile App", "tasks": ["Setup project", "Create wireframes", "Code review", "Testing phase", "Deploy to store"] }
```

## Esempi di codice
<a name="position-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$position` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$pull`operatore viene utilizzato per rimuovere da un array tutte le istanze di uno o più valori che corrispondono a una condizione specificata. Questo operatore è utile quando è necessario rimuovere elementi specifici da un campo di matrice all'interno di un documento.

**Parametri**
+ `field`: il nome del campo dell'array da cui rimuovere i valori.
+ `value`: il valore o la condizione che determina quali elementi rimuovere dall'array.

## Esempio (MongoDB Shell)
<a name="pull-examples"></a>

L'esempio seguente mostra come utilizzare l'`$pull`operatore per rimuovere elementi da un campo di matrice.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.restaurants.updateMany(
  { cuisine: "Italian" },
  { $pull: { features: "Takeout" } }
)
```

**Output**

```
{
  "acknowledged" : true,
  "matchedCount" : 1,
  "modifiedCount" : 1
}
```

La query precedente rimuove la funzione «Takeout» da tutti i documenti in cui il `cuisine` campo è «italiano».

## Esempi di codice
<a name="pull-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$pull` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$pullAll`operatore in Amazon DocumentDB viene utilizzato per rimuovere tutte le istanze dei valori specificati da un campo array. Ciò è particolarmente utile quando è necessario rimuovere più elementi da un array in un'unica operazione.

**Parametri**
+ `field`: il nome del campo dell'array da cui rimuovere gli elementi.
+ `value`: Una matrice di valori da rimuovere dal campo dell'array.

## Esempio (MongoDB Shell)
<a name="pullAll-examples"></a>

L'esempio seguente mostra come utilizzare l'`$pullAll`operatore per rimuovere più elementi da un campo di matrice.

**Crea documenti di esempio**

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

**Esempio di interrogazione**

```
db.restaurants.update(
  { "name": "Taj Mahal" },
  { $pullAll: { "features": ["Private Dining", "Live Music"] } }
)
```

**Output**

```
{
  "name": "Taj Mahal",
  "cuisine": "Indian",
  "features": []
}
```

## Esempi di codice
<a name="pullAll-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$pullAll` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$push`operatore in Amazon DocumentDB viene utilizzato per aggiungere un elemento a un campo array in un documento. Questo operatore è particolarmente utile quando è necessario aggiungere nuovi dati a un array esistente senza sovrascrivere l'intero array.

**Parametri**
+ `field`: il nome del campo dell'array a cui aggiungere il nuovo elemento.
+ `value`: Il valore da aggiungere all'array.
+ `position`: (opzionale) Un modificatore che specifica la posizione nell'array in cui deve essere aggiunto il nuovo elemento. I modificatori supportati includono `$` (aggiungi alla fine dell'array) e `$[]` (aggiungi alla fine dell'array, ignorando qualsiasi filtro dell'array).

## Esempio (MongoDB Shell)
<a name="push-examples"></a>

L'esempio seguente mostra come utilizzare l'`$push`operatore per aggiungere nuovi elementi a un campo di matrice in un documento.

**Crea documenti di esempio**

```
db.users.insert([
  { _id: 1, name: "John Doe", hobbies: ["reading", "swimming"] },
  { _id: 2, name: "Jane Smith", hobbies: ["gardening", "cooking"] }
])
```

**Esempio di interrogazione**

```
db.users.updateOne(
  { _id: 1 },
  { $push: { hobbies: "hiking" } }
)
```

**Output**

```
{
  "acknowledged" : true,
  "matchedCount" : 1,
  "modifiedCount" : 1
}
```

Dopo aver eseguito l'aggiornamento, il documento con `_id: 1` avrà l'`hobbies`array aggiornato a`[&quot;reading&quot;, &quot;swimming&quot;, &quot;hiking&quot;]`.

## Esempi di codice
<a name="push-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$push` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$rename`operatore in Amazon DocumentDB viene utilizzato per rinominare un campo in un documento. Questo operatore può essere particolarmente utile quando è necessario aggiornare la struttura dei documenti o allinearli a nuovi modelli di dati.

**Parametri**
+ `field`: Il campo da rinominare.
+ `newName`: Il nuovo nome per il campo.

## Esempio (MongoDB Shell)
<a name="rename-examples"></a>

L'esempio seguente mostra come utilizzare l'`$rename`operatore per rinominare il `&quot;Date.DoW&quot;` campo `&quot;Date.DayOfWeek&quot;` in un documento con il `&quot;DocName&quot;` campo impostato su. `&quot;Document 1&quot;`

**Crea documenti di esempio**

```
db.example.insertOne({
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    },
    "Words": 2482
})
```

**Esempio di interrogazione**

```
db.example.update(
    { "DocName": "Document 1" },
    { $rename: { "Date.DoW": "Date.DayOfWeek" } }
)
```

**Output**

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DayOfWeek": "Saturday"
    },
    "Words": 2482
}
```

## Esempi di codice
<a name="rename-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$rename` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$set`operatore in Amazon DocumentDB viene utilizzato per aggiornare il valore di un campo specificato in un documento. Questo operatore consente di aggiungere nuovi campi o modificare quelli esistenti all'interno di un documento. È un operatore di aggiornamento fondamentale nel driver Java MongoDB, compatibile con Amazon DocumentDB.

**Parametri**
+ `field`: Il campo da aggiornare.
+ `value`: Il nuovo valore per il campo.

## Esempio (MongoDB Shell)
<a name="set-examples"></a>

L'esempio seguente mostra come utilizzare l'`$set`operatore per aggiornare il `Item` campo in un documento.

**Crea documenti di esempio**

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

**Esempio di query**

```
db.example.update(
  { "Item": "Pen" },
  { $set: { "Item": "Gel Pen" } }
)
```

**Output**

```
{
  "Item": "Gel Pen",
  "Colors": ["Red", "Green", "Blue", "Black"],
  "Inventory": {
    "OnHand": 244,
    "MinOnHand": 72
  }
}
```

## Esempi di codice
<a name="set-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$set` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

L'`$setOnInsert`operatore in Amazon DocumentDB viene utilizzato per impostare il valore di un campo se viene inserito un documento, ma non ha effetto se il documento viene aggiornato.

**Parametri**
+ `field`: Il campo da impostare.
+ `value`: Il valore da assegnare al campo.

## Esempio (MongoDB Shell)
<a name="setOnInsert-examples"></a>

L'esempio seguente dimostra l'utilizzo dell'`$setOnInsert`operatore in Amazon DocumentDB. Crea un nuovo documento se il documento non esiste già, ma non ha effetto se il documento viene aggiornato.

**Crea documenti di esempio**

```
db.users.insertOne({
  _id: 1,
  name: "John Doe",
  age: 30
})
```

**Esempio di query 1: aggiorna un documento esistente**

```
db.users.update(
  { _id: 1 },
  {
    $set: { age: 31 },
    $setOnInsert: { createdAt: new Date() }
  },
  { upsert: true }
)
```

**Output 1**

```
{
  _id: 1,
  name: "John Doe",
  age: 31
}
```

L'output mostra che il documento è stato aggiornato, ma il `createdAt` campo **NON è stato aggiunto** poiché il documento esisteva già. L'`$setOnInsert`operatore si applica solo quando si inseriscono nuovi documenti.

**Esempio di query 2 - Inserisci nuovo documento (upsert)**

```
db.users.update(
  { _id: 2 },
  {
    $set: { name: "Jane Smith", age: 25 },
    $setOnInsert: { createdAt: new Date() }
  },
  { upsert: true }
)
```

**Uscita 2**

```
{
  _id: 2,
  name: "Jane Smith", 
  age: 25,
  createdAt: ISODate("2025-10-31T09:57:52.459Z")
}
}
```

## Esempi di codice
<a name="setOnInsert-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$setOnInsert` comando, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'operatore di `$slice` aggiornamento modifica un array limitandone le dimensioni. Se utilizzato con l'`$push`operatore, limita il numero di elementi in un array, mantenendo solo il numero specificato di elementi più recenti o meno recenti.

**Parametri**
+ `field`: il campo dell'array da modificare.
+ `count`: numero massimo di elementi da conservare. I valori positivi mantengono i primi N elementi, i valori negativi mantengono gli ultimi N elementi.

## Esempio (MongoDB Shell)
<a name="slice-update-examples"></a>

L'esempio seguente mostra come utilizzare l'operatore `$slice` update with per mantenere un array `$push` a dimensione fissa di punteggi recenti.

**Crea documenti di esempio**

```
db.students.insertOne({
  _id: 1,
  name: "Alice",
  scores: [85, 90, 78]
});
```

**Esempio di interrogazione**

```
db.students.updateOne(
  { _id: 1 },
  {
    $push: {
      scores: {
        $each: [92, 88],
        $slice: -3
      }
    }
  }
)
```

**Output**

```
{
  "_id" : 1,
  "name" : "Alice",
  "scores" : [ 78, 92, 88 ]
}
```

In questo esempio, il `$slice: -3` modificatore mantiene solo gli ultimi tre elementi dopo aver inserito nuovi valori nell'array.

## Esempi di codice
<a name="slice-update-code"></a>

Per visualizzare un esempio di codice per l'utilizzo dell'operatore `$slice` update, scegliete la scheda relativa alla lingua che desiderate utilizzare:

------
#### [ 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>

Il modificatore di `$sort` aggiornamento ordina gli elementi dell'array quando viene utilizzato con l'`$push`operatore. Dispone gli elementi dell'array in ordine crescente o decrescente in base ai valori di campo specificati o agli elementi stessi.

**Parametri**
+ `field`: il campo dell'array da modificare.
+ `order`: da utilizzare `1` per l'ordine crescente o `-1` per l'ordine decrescente.

## Esempio (MongoDB Shell)
<a name="sort-update-examples"></a>

L'esempio seguente dimostra l'utilizzo del `$sort` modificatore con `$push` per aggiungere nuovi punteggi dei quiz e mantenerli ordinati in ordine decrescente.

**Crea documenti di esempio**

```
db.students.insertOne({
  _id: 1,
  name: "Bob",
  quizzes: [
    { score: 85, date: "2024-01-15" },
    { score: 92, date: "2024-02-10" }
  ]
});
```

**Esempio di query**

```
db.students.updateOne(
  { _id: 1 },
  {
    $push: {
      quizzes: {
        $each: [{ score: 78, date: "2024-03-05" }],
        $sort: { score: -1 }
      }
    }
  }
)
```

**Output**

```
{
  "_id" : 1,
  "name" : "Bob",
  "quizzes" : [
    { "score" : 92, "date" : "2024-02-10" },
    { "score" : 85, "date" : "2024-01-15" },
    { "score" : 78, "date" : "2024-03-05" }
  ]
}
```

## Esempi di codice
<a name="sort-update-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del modificatore di `$sort` aggiornamento, scegli la scheda relativa alla lingua che desideri utilizzare:

------
#### [ 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>

L'`$unset`operatore in Amazon DocumentDB viene utilizzato per rimuovere un campo specificato da un documento. Quando un campo viene rimosso utilizzando`$unset`, il campo viene eliminato dal documento e le dimensioni del documento vengono ridotte di conseguenza. Ciò può essere utile quando si desidera rimuovere dati non necessari dai documenti.

**Parametri**
+ `field`: Il campo da rimuovere dal documento. Può essere un campo singolo o un percorso punteggiato verso un campo nidificato.

## Esempio (MongoDB Shell)
<a name="unset-examples"></a>

L'esempio seguente mostra come utilizzare l'`$unset`operatore per rimuovere il `Words` campo da un documento della raccolta. `example`

**Crea documenti di esempio**

```
db.example.insert({
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    },
    "Words": 2482
})
```

**Esempio di interrogazione**

```
db.example.update(
    { "DocName" : "Document 1" },
    { $unset: { Words:1 } }
)
```

**Output**

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    }
}
```

In questo esempio, l'`$unset`operatore viene utilizzato per rimuovere il `Words` campo dal documento `DocName` pari a «Documento 1". Il documento risultante non contiene più il `Words` campo.

## Esempi di codice
<a name="unset-code"></a>

Per visualizzare un esempio di codice per l'utilizzo del `$unset` comando, scegliete la scheda relativa alla lingua che desiderate utilizzare:

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

------