

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# MongoDB APIs, opérations et types de données pris en charge dans Amazon DocumentDB
<a name="mongo-apis"></a>

Amazon DocumentDB (compatible avec MongoDB) est un service de base de données de documents rapide, évolutif, hautement disponible et entièrement géré qui prend en charge les charges de travail MongoDB. Amazon DocumentDB est compatible avec les versions 3.6, 4.0, 5.0 et 8.0 de MongoDB. APIs Cette section répertorie les fonctionnalités prises en charge. Pour obtenir de l'aide sur l'utilisation de MongoDB APIs et des pilotes, veuillez consulter les forums de la communauté MongoDB. Pour obtenir de l'aide concernant l'utilisation du service Amazon DocumentDB, contactez l'équipe d' AWS assistance appropriée. Pour connaître les différences fonctionnelles entre Amazon DocumentDB et MongoDB, consultez. [Différences fonctionnelles : Amazon DocumentDB et MongoDB](functional-differences.md) 

Les commandes et opérateurs MongoDB internes uniquement ou non applicables à un service entièrement géré ne sont pas pris en charge et ne sont pas inclus dans la liste des fonctionnalités prises en charge.

Depuis le lancement, nous avons ajouté plus de 50 fonctions supplémentaires et nous continuerons à prendre en compte les retours de nos clients pour fournir les fonctions dont ils ont besoin. Pour plus d'informations sur les derniers lancements, consultez les annonces d'[Amazon DocumentDB.](https://aws.amazon.com/documentdb/resources/)

Si vous souhaitez que nous développions une fonctionnalité qui n'est pas prise en charge, veuillez nous en informer en envoyant un e-mail avec votre AccountID, les fonctionnalités demandées et le cas d'utilisation à l'équipe du service Amazon [DocumentDB](mailto:documentdb-feature-request@amazon.com).
+ [commandes de base de données](#mongo-apis-database)
+ [Opérateurs de requête et de projection](#mongo-apis-query)
+ [Mettre à jour les opérateurs](#mongo-apis-update)
+ [Géospatial](#mongo-apis-geospatial)
+ [Méthodes du curseur](#mongo-apis-cursor)
+ [Opérateurs de pipeline d'agrégation](#mongo-apis-aggregation-pipeline)
+ [Types de données](#mongo-apis-data-types)
+ [Index](#mongo-apis-indexes)

## commandes de base de données
<a name="mongo-apis-database"></a>

**Topics**
+ [Commandes administratives](#mongo-apis-dababase-administrative)
+ [Agrégation](#mongo-apis-dababase-aggregation)
+ [Authentification](#mongo-apis-dababase-authentication)
+ [Commandes de diagnostic](#mongo-apis-dababase-diagnostics)
+ [Opérations de requête et d'écriture](#mongo-apis-dababase-query-write)
+ [Commandes de gestion des rôles](#mongo-apis-database-role-management)
+ [Commandes de sessions](#mongo-apis-dababase-sessions)
+ [Gestion des utilisateurs](#mongo-apis-dababase-user-management)
+ [Commandes de partitionnement](#mongo-apis-dababase-sharding)

### Commandes administratives
<a name="mongo-apis-dababase-administrative"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  Collections limitées  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  cloneCollectionAsCapuché  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  collMod  |  Partielle  |  Partielle  |  Partielle  |  Partielle  |  Partielle  | 
|  CollMod : expireAfterSeconds  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  convertToCapped  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  copydb  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  créer  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  createView  |  Non  |  Non  |  Non  |  Oui  |  Non  | 
|  createIndexes  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  currentOp  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  drop  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  dropDatabase  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  dropIndexes  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  filemd5  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  getAuditConfig  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 
|  killCursors  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  killOp  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Répertorier les collections\$1  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  listDatabases  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  listIndexes  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  reIndex  |  Non  |  Non  |  Oui  |  Oui  |  Non  | 
|  renameCollection  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  setAuditConfig  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 

\$1 La `type` touche de l'option de filtre n'est pas prise en charge.

### Agrégation
<a name="mongo-apis-dababase-aggregation"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  aggregate  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  count  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  distinct  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  mapReduce  |  Non  |  Non  |  Non  |  Oui  |  Non  | 

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


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  authenticate  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  logout  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Commandes de diagnostic
<a name="mongo-apis-dababase-diagnostics"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  buildInfo  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  collStats  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  connPoolStats  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  connectionStatus  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  dataSize  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  dbHash  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  dbStats  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  explain  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  explain: executionStats  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  fonctionnalités  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  hostInfo  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  listCommands  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Profiler  |  [Oui](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  [Oui](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  [Oui](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  [Oui](https://docs.aws.amazon.com//documentdb/latest/developerguide/profiling.html)  |  Non  | 
|  serverStatus  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  top  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérations de requête et d'écriture
<a name="mongo-apis-dababase-query-write"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  Change streams  |  [Oui](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  [Oui](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  [Oui](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  [Oui](https://docs.aws.amazon.com//documentdb/latest/developerguide/change_streams.html)  |  Non  | 
|  supprimer  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  find  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  findAndModify  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  getLastError  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  getMore  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  getPrevError  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  GridFS  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  insert  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  parallelCollectionScan  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  resetError  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  mise à jour  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  ReplaceOne  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Commandes de gestion des rôles
<a name="mongo-apis-database-role-management"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  createRole  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  dropAllRolesFromDatabase  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  dropRole  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  grantRolesToRôle  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  revokeRolesFromRôle  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  revokePrivilegesFromRôle  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  rolesInfo  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  updateRole  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 

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


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  Annulation de la transaction  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 
|  commitTransaction  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 
|  Fin des sessions  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|   killAllSessions  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 
|  killAllSessionsByPattern  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  Kill Sessions  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 
|  Séances de rafraîchissement  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  Démarrer la session  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 

### Gestion des utilisateurs
<a name="mongo-apis-dababase-user-management"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  createUser  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  dropAllUsersFromDatabase  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  dropUser  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  grantRolesToUser  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  revokeRolesFromUser  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  updateUser  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Informations sur les utilisateurs  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Commandes de partitionnement
<a name="mongo-apis-dababase-sharding"></a>


| Commande | Cluster élastique | 
| --- | --- | 
|  abortReshardCollection  |  Non  | 
|  Ajouter un fragment  |  Non  | 
|  addShardToZone  |  Non  | 
|  balancerCollectionStatus  |  Non  | 
|  BalancerStart  |  Non  | 
|  État de l'équilibreur  |  Non  | 
|  BalancerStop  |  Non  | 
|  checkShardingIndex  |  Non  | 
|  clearJumboFlag  |  Non  | 
|  cleanupOrphaned  |  Non  | 
|  cleanupReshardCollection  |  Non  | 
|  commitReshardCollection  |  Non  | 
|  Activer le partage  |  Oui  | 
|  flushRouterConfig  |  Non  | 
|  getShardMap  |  Non  | 
|  getShardVersion  |  Non  | 
|  isdbgrid  |  Non  | 
|  Listes Shards  |  Non  | 
|  Clé médiane  |  Non  | 
|  Déplacer Chunk  |  Non  | 
|  Déplacer le primaire  |  Non  | 
|  Fusionner des morceaux  |  Non  | 
|  refineCollectionShardClé  |  Non  | 
|  Supprimer le dur  |  Non  | 
|  removeShardFromZone  |  Non  | 
|  Collection Reshard  |  Non  | 
|  setAllowMigrations  |  Non  | 
|  setShardVersion  |  Non  | 
|  Collection SHARD  |  Oui  | 
|  État de partage  |  Non  | 
|  split  |  Non  | 
|  Vecteur divisé  |  Non  | 
|  Désactiver le sharding  |  Non  | 
|  updateZoneKeyGamme  |  Non  | 

## Opérateurs de requête et de projection
<a name="mongo-apis-query"></a>

**Topics**
+ [Opérateurs de grappe](#mongo-apis-query-array-operators)
+ [Opérateurs bit à bit](#mongo-apis-query-bitwise-operators)
+ [Opérateur de commentaires](#mongo-apis-query-comment-operator)
+ [Opérateurs de comparaison](#mongo-apis-query-comparison-operators)
+ [Opérateurs d'éléments](#mongo-apis-query-element-operators)
+ [Opérateurs de requête d'évaluation](#mongo-apis-query-evaluation-operators)
+ [Opérateurs logiques](#mongo-apis-query-logical-operators)
+ [Opérateurs de projection](#mongo-apis-projection-operators)

### Opérateurs de grappe
<a name="mongo-apis-query-array-operators"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1all](all.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1elemMatch](elemMatch.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1size](size-query.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs bit à bit
<a name="mongo-apis-query-bitwise-operators"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1bitsAllSet](bitsAllSet.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1bitsAnySet](bitsAnySet.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1bitsAllClear](bitsAllClear.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1bitsAnyClear](bitsAnyClear.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateur de commentaires
<a name="mongo-apis-query-comment-operator"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1comment](comment.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs de comparaison
<a name="mongo-apis-query-comparison-operators"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1eq](eq.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1gt](gt.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1gte](gte.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1in](in.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1lt](lt.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1lte](lte.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1ne](ne.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1nin](nin.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs d'éléments
<a name="mongo-apis-query-element-operators"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1exists](exists.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1type](type.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs de requête d'évaluation
<a name="mongo-apis-query-evaluation-operators"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1expr](expr.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 
|  [\$1jsonSchema](jsonSchema.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 
|  [\$1mod](mod-query.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1regex](regex.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1text](text.md)  |  Non  |  Non  |  Oui  |  Oui  |  Non  | 
|  \$1where  |  Non  |  Non  |  Non  |  Non  |  Non  | 

### Opérateurs logiques
<a name="mongo-apis-query-logical-operators"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1and](and.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1nor](nor.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1not](not.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1or](or.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs de projection
<a name="mongo-apis-projection-operators"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1](dollar-projection.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1elemMatch](elemMatch.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1meta](meta.md)  |  Non  |  Non  |  Oui  |  Oui  |  Non  | 
|  [\$1slice](slice-projection.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

## Mettre à jour les opérateurs
<a name="mongo-apis-update"></a>

**Topics**
+ [Opérateurs de réseaux](#mongo-apis-update-array)
+ [Opérateurs bit à bit](#mongo-apis-update-bitwise)
+ [Opérateurs de terrain](#mongo-apis-update-field)
+ [Modifier les modificateurs](#mongo-apis-update-modifiers)

### Opérateurs de réseaux
<a name="mongo-apis-update-array"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1](dollar-update.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1[]](dollarBrackets-update.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1[<identifier>]](dollarIdentifier-update.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1addToSet](addToSet.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1pop](pop.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1pullAll](pullAll.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1pull](pull.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1push](push.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs bit à bit
<a name="mongo-apis-update-bitwise"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1bit](bit.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs de terrain
<a name="mongo-apis-update-field"></a>


| Opérateur | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1currentDate](currentDate.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1inc](inc.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1max](max-update.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1min](min-update.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1mul](mul.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1rename](rename.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1set](set-update.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1setOnInsert](setOnInsert.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1unset](unset-update.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Modifier les modificateurs
<a name="mongo-apis-update-modifiers"></a>


| Opérateur | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1each](each.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1position](position.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1slice](slice-update.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1sort](sort-update.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

## Géospatial
<a name="mongo-apis-geospatial"></a>

### Spécificateurs de géométrie
<a name="mongo-apis-geospatial-geometry-specifiers"></a>


| Sélecteurs de requête | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  \$1box  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  \$1center  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  \$1centerSphere  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  [\$1geometry](geometry.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1maxDistance](maxDistance.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1minDistance](minDistance.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1nearSphere](nearSphere.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  \$1polygon  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  \$1uniqueDocs  |  Non  |  Non  |  Non  |  Non  |  Non  | 

### Sélecteurs de requêtes
<a name="mongo-apis-geospatial-query-selectors"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1geoIntersects](geoIntersects.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1geoWithin](geoWithin.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1near](near.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1nearSphere](nearSphere.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  \$1polygon  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  \$1uniqueDocs  |  Non  |  Non  |  Non  |  Non  |  Non  | 

## Méthodes du curseur
<a name="mongo-apis-cursor"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  cursor.batchSize()  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  cursor.close()  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  cursor.collation()  |  Non  |  Non  |  Non  |  Oui  |  Non  | 
|  cursor.comment()  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  cursor.count()  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  cursor.explain()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.forEach()  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  cursor.hasNext()  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  cursor.hint()  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui\$1  | 
|  cursor.isClosed()  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  cursor.isExhausted()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.itcount()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.limit()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.map()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.max()  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  cursor.maxScan()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.maxTimeMS()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.min()  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  cursor.next()  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  curseur. noCursorTimeout()  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  curseur. objsLeftInBatch ()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.pretty()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.readConcern()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.readPref()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.returnKey()  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  curseur. showRecordId()  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  cursor.size()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.skip()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.sort()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  cursor.tailable()  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  cursor.toArray()  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 

\$1 L'index `hint` est pris en charge par des expressions d'index. Par exemple, `db.foo.find().hint({x:1})`.

## Opérateurs de pipeline d'agrégation
<a name="mongo-apis-aggregation-pipeline"></a>

**Topics**
+ [Expressions de l'accumulateur](#mongo-apis-aggregation-pipeline-accumulator-expressions)
+ [Opérateurs arithmétiques](#mongo-apis-aggregation-pipeline-arithmetic)
+ [Opérateurs de réseaux](#mongo-apis-aggregation-pipeline-array)
+ [Opérateurs booléens](#mongo-apis-aggregation-pipeline-boolean)
+ [Opérateurs de comparaison](#mongo-apis-aggregation-pipeline-comparison)
+ [Opérateurs d'expressions conditionnelles](#mongo-apis-aggregation-pipeline-conditional)
+ [Opérateur de type de données](#mongo-apis-aggregation-pipeline-data-type)
+ [Opérateur de taille des données](#mongo-apis-aggregation-pipeline-data-size)
+ [Opérateurs de date](#mongo-apis-aggregation-pipeline-date)
+ [Opérateur littéral](#mongo-apis-aggregation-pipeline-literal)
+ [Opérateur de fusion](#mongo-apis-aggregation-pipeline-merge)
+ [Opérateur naturel](#mongo-apis-aggregation-pipeline-natural)
+ [Définir les opérateurs](#mongo-apis-aggregation-pipeline-set)
+ [Opérateurs de scène](#mongo-apis-aggregation-pipeline-stage)
+ [Opérateurs de chaîne](#mongo-apis-aggregation-pipeline-string)
+ [Variables système](#mongo-apis-aggregation-pipeline-system-variables)
+ [Opérateur de recherche de texte](#mongo-apis-aggregation-pipeline-text-search)
+ [Opérateurs de conversion de type](#mongo-apis-aggregation-pipeline-type)
+ [Opérateurs variables](#mongo-apis-aggregation-pipeline-variable)
+ [Opérateurs divers](#mongo-apis-aggregation-pipeline-misc)

### Expressions de l'accumulateur
<a name="mongo-apis-aggregation-pipeline-accumulator-expressions"></a>


| Expression | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  \$1accumulateur  |  -  |  -  |  Non  |  Non  |  Non  | 
|  [\$1addToSet](addToSet-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1avg](avg.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1count](count.md)  |  -  |  -  |  Non  |  Non  |  Non  | 
|  \$1CovariancePop  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  \$1 CovarianceSamp  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  Rang dense \$1  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  \$1dérivé  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  Numéro du document \$1  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  \$1expMovingAvg  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  [\$1first](first.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  \$1intégral  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  [\$1last](last.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1max](max.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1min](min.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1push](push-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  \$1rang  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  \$1shift  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  \$1stdDevPop  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  \$1stdDevSamp  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  [\$1sum](sum.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs arithmétiques
<a name="mongo-apis-aggregation-pipeline-arithmetic"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1abs](abs.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1add](add.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1ceil](ceil.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1divide](divide.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1exp](exp.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1floor](floor.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1ln](ln.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1log](log.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1log10](log10.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1mod](mod.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1multiply](multiply.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1pow](pow.md)  |  Non  |  Non  |  Non  |  Oui  |  Non  | 
|  \$1round  |  -  |  -  |  Non  |  Non  |  Non  | 
|  [\$1sqrt](sqrt.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1subtract](subtract.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  \$1trunc  |  Non  |  Non  |  Non  |  Non  |  Non  | 

### Opérateurs de réseaux
<a name="mongo-apis-aggregation-pipeline-array"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1arrayElemAt](arrayElemAt.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1arrayToObject](arrayToObject.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1concatArrays](concatArrays.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1filter](filter.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1first](first.md)  |  -  |  -  |  Oui  |  Oui  |  Non  | 
|  [\$1in](in-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1indexOfArray](indexOfArray.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1isArray](isArray.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1last](last.md)  |  -  |  -  |  Oui  |  Oui  |  Non  | 
|  [\$1objectToArray](objectToArray.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1range](range.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1reverseArray](reverseArray.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1reduce](reduce.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1size](size.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1slice](slice.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1zip](zip.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs booléens
<a name="mongo-apis-aggregation-pipeline-boolean"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1and](and-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1not](not-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1or](or-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs de comparaison
<a name="mongo-apis-aggregation-pipeline-comparison"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1cmp](cmp.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1eq](eq-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1gt](gt-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1gte](gte-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1lt](lt-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1lte](lte-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1ne](ne-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs d'expressions conditionnelles
<a name="mongo-apis-aggregation-pipeline-conditional"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1cond](cond.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1ifNull](ifNull.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1switch](switch.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 

### Opérateur de type de données
<a name="mongo-apis-aggregation-pipeline-data-type"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1type](type-aggregation.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateur de taille des données
<a name="mongo-apis-aggregation-pipeline-data-size"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  Taille binaire \$1  |  -  |  -  |  Non  |  Non  |  Non  | 
|  \$1BSON Size  |  -  |  -  |  Non  |  Non  |  Non  | 

### Opérateurs de date
<a name="mongo-apis-aggregation-pipeline-date"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1dateAjouter](dateAdd.md)  |  Non  |  Non  |  Oui  |  Oui  |  Oui  | 
|  [\$1DateDiff](dateDiff.md)  |  -  |  -  |  Oui  |  Oui  |  Non  | 
|  \$1dateFromParts  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  [\$1dateFromString](dateFromString.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1dateSubstract](dateSubtract.md)  |  Non  |  Non  |  Oui  |  Oui  |  Oui  | 
|  \$1dateToParts  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  [\$1dateToString](dateToString.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1DateTrunc](dateTrunc.md)  |  -  |  -  |  Non  |  Oui  |  Non  | 
|  [\$1dayOfMonth](dayOfMonth.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1dayOfWeek](dayOfWeek.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1dayOfYear](dayOfYear.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1hour](hour.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1 isoDayOf par semaine](isoDayOfWeek.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1isoWeek](isoWeek.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1isoWeekYear](isoWeekYear.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1millisecond](millisecond.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1minute](minute.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1month](month.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1second](second.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1week](week.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1year](year.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateur littéral
<a name="mongo-apis-aggregation-pipeline-literal"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1literal](literal.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateur de fusion
<a name="mongo-apis-aggregation-pipeline-merge"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1mergeObjects](mergeObjects.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateur naturel
<a name="mongo-apis-aggregation-pipeline-natural"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1naturel](natural.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Définir les opérateurs
<a name="mongo-apis-aggregation-pipeline-set"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1allElementsTrue](allElementsTrue.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1anyElementTrue](anyElementTrue.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1setDifference](setDifference.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1setEquals](setEquals.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1setIntersection](setIntersection.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1setIsSubset](setIsSubset.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1setUnion](setUnion.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  \$1setWindowFields  |  Non  |  Non  |  Non  |  Non  |  Non  | 

### Opérateurs de scène
<a name="mongo-apis-aggregation-pipeline-stage"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1addFields](addFields.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1bucket](bucket.md)  |  Non  |  Non  |  Non  |  Oui  |  Non  | 
|  \$1bucketAuto  |  Non  |  Non  |  Non  |  Non  | 
|  [\$1 ChangeStream](changeStream.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  [\$1collStats](collStats.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 
|  [\$1count](count.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1currentOp](currentOp.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  \$1facet  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  [\$1geoNear](geoNear.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  \$1graphLookup  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  [\$1group](group.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1indexStats](indexStats.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1limit](limit.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  \$1listLocalSessions  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  \$1listSessions  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  [\$1lookup](lookup.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1match](match.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1 fusion](merge.md)  |  -  |  -  |  Non  |  Oui  |  Non  | 
|  [\$1out](out.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Non  | 
|  \$1planCacheStats  |  -  |  -  |  Non  |  Non  |  Non  | 
|  [\$1project](project.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1redact](redact.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1replaceRoot](replaceRoot.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1sample](sample.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1set](set-stage.md)  |  -  |  -  |  Non  |  Oui  |  Non  | 
|  \$1setWindowFields  |  -  |  -  |  Non  |  Non  |  Non  | 
|  [\$1skip](skip.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1sort](sort.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  \$1sortByCount  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  \$1 Union avec  |  -  |  -  |  Non  |  Non  |  Non  | 
|  [\$1unset](unset-stage.md)  |  -  |  -  |  Non  |  Oui  |  Non  | 
|  [\$1unwind](unwind.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1replaceWith](replaceWith.md)  |  Non  |  Non  |  Non  |  Oui  |  Non  | 
|  [\$1VectorSearch](vectorSearch.md)  |  Non  |  Non  |  Non  |  Oui  |  Non  | 

### Opérateurs de chaîne
<a name="mongo-apis-aggregation-pipeline-string"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1concat](concat.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1indexOfBytes](indexOfBytes.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1indexOfCP](indexOfCP.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1ltrim](ltrim.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 
|  [\$1RegexFind](regexFind.md)  |  -  |  -  |  Oui  |  Oui  |  Non  | 
|  [\$1regexFindAll](regexFindAll.md)  |  -  |  -  |  Oui  |  Oui  |  Non  | 
|  [\$1RegexMatch](regexMatch.md)  |  -  |  -  |  Oui  |  Oui  |  Non  | 
|  [\$1 Remplacer tout](replaceAll.md)  |  -  |  -  |  Oui  |  Oui  |  Non  | 
|  [\$1RemplaceOne](replaceOne.md)  |  -  |  -  |  Oui  |  Oui  |  Non  | 
|  [\$1trim](rtrim.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 
|  [\$1split](split.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1strcasecmp](strcasecmp.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1strLenBytes](strLenBytes.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1strLenCP](strLenCP.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1substr](substr.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1substrBytes](substrBytes.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1substrCP](substrCP.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1toLower](toLower.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1toUpper](toUpper.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1trim](trim.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Non  | 

### Variables système
<a name="mongo-apis-aggregation-pipeline-system-variables"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  \$1\$1CURRENT  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  [\$1\$1DESCEND](DESCEND.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1\$1KEEP](KEEP.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1\$1PRUNE](PRUNE.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  \$1\$1REMOVE  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  [\$1RACINE](ROOT.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateur de recherche de texte
<a name="mongo-apis-aggregation-pipeline-text-search"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1meta](meta-aggregation.md)  |  Non  |  Non  |  Oui  |  Oui  |  Non  | 
|  [\$1search](search.md)  |  Non  |  Non  |  Oui  |  Oui  |  Non  | 

### Opérateurs de conversion de type
<a name="mongo-apis-aggregation-pipeline-type"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1 convertir](convert.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  \$1isNumber  |  -  |  -  |  Non  |  Non  |  Non  | 
|  [\$1 à Bool](toBool.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1 à ce jour](toDate.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1 en décimal](toDecimal.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1 à doubler](toDouble.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1 en INT](toInt.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1 trop long](toLong.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1toObjectId](toObjectId.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1toString](toString.md)  |  Non  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs variables
<a name="mongo-apis-aggregation-pipeline-variable"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  [\$1let](let.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  [\$1map](map.md)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 

### Opérateurs divers
<a name="mongo-apis-aggregation-pipeline-misc"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  \$1GetField  |  -  |  -  |  Non  |  Non  |  Non  | 
|  [\$1 rand](rand.md)  |  -  |  -  |  Non  |  Oui  |  Non  | 
|  \$1 SampleRate  |  -  |  -  |  Non  |  Non  |  Non  | 

## Types de données
<a name="mongo-apis-data-types"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  Entier 32 bits (int)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Entier 64 bits (long)  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Tableau  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Données binaires  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Booléen  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Date  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  DBPointer  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  DBRefs  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  Decimal128  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Double  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  JavaScript  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  JavaScript(avec lunette)  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  MaxKey  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  MinKey  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Null  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Objet  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  ObjectId  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Expression régulière  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  String  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Symbol  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  Horodatage  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Non défini  |  Non  |  Non  |  Non  |  Non  |  Non  | 

## Index et propriétés d'index
<a name="mongo-apis-index"></a>

**Topics**
+ [Index](#mongo-apis-indexes)
+ [Propriétés de l'index](#mongo-apis-index-properties)

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


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  Sphère 2d  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Index 2d  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  Index composé  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Index haché  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  Index multiclés  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Index de champ unique  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Index de texte  |  Non  |  Non  |  Oui  |  Oui  |  Non  | 
|  Caractère générique  |  Non  |  Non  |  Non  |  Non  |  Non  | 

### Propriétés de l'index
<a name="mongo-apis-index-properties"></a>


| Commande | 3.6 | 4.0 | 5.0 | 8.0 | Cluster élastique | 
| --- | --- | --- | --- | --- | --- | 
|  Contexte  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Sensible à la casse  |  Non  |  Non  |  Non  |  Oui  |  Non  | 
|  Hidden  |  Non  |  Non  |  Non  |  Non  |  Non  | 
|  Partielle  |  Non  |  Non  |  Oui  |  Oui  |  Non  | 
|  Fragmentée  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Texte  |  Non  |  Non  |  Oui  |  Oui  |  Non  | 
|  TTL  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Unique  |  Oui  |  Oui  |  Oui  |  Oui  |  Oui  | 
|  Vecteur  |  Non  |  Non  |  Oui  |  Oui  |  Non  | 

Pour obtenir des informations détaillées sur des opérateurs MongoDB spécifiques, consultez les rubriques suivantes :
+ [Opérateurs de pipeline d'agrégation](mongo-apis-aggregation-pipeline-operators.md)
+ [Géospatial](mongo-apis-geospatial-operators.md)
+ [Opérateurs de projection](#mongo-apis-projection-operators)
+ [Mettre à jour les opérateurs](mongo-apis-update-operators.md)

# Opérateurs de pipeline d'agrégation
<a name="mongo-apis-aggregation-pipeline-operators"></a>

Cette section fournit des informations détaillées sur les opérateurs de pipeline d'agrégation pris en charge par Amazon DocumentDB.

**Topics**
+ [\$1\$1DESCEND](DESCEND.md)
+ [\$1\$1KEEP](KEEP.md)
+ [\$1\$1PRUNE](PRUNE.md)
+ [\$1RACINE](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)
+ [\$1 ChangeStream](changeStream.md)
+ [\$1cmp](cmp.md)
+ [\$1collStats](collStats.md)
+ [\$1concat](concat.md)
+ [\$1concatArrays](concatArrays.md)
+ [\$1cond](cond.md)
+ [\$1 convertir](convert.md)
+ [\$1count](count.md)
+ [\$1currentOp](currentOp.md)
+ [\$1dateAjouter](dateAdd.md)
+ [\$1DateDiff](dateDiff.md)
+ [\$1dateFromString](dateFromString.md)
+ [\$1dateSubstract](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 par semaine](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)
+ [\$1 fusion](merge.md)
+ [\$1mergeObjects](mergeObjects.md)
+ [\$1millisecond](millisecond.md)
+ [\$1min](min.md)
+ [\$1minute](minute.md)
+ [\$1mod](mod.md)
+ [\$1month](month.md)
+ [\$1multiply](multiply.md)
+ [\$1naturel](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 Remplacer tout](replaceAll.md)
+ [\$1RemplaceOne](replaceOne.md)
+ [\$1replaceRoot](replaceRoot.md)
+ [\$1replaceWith](replaceWith.md)
+ [\$1reverseArray](reverseArray.md)
+ [\$1trim](rtrim.md)
+ [\$1sample](sample.md)
+ [\$1search](search.md)
+ [\$1second](second.md)
+ [\$1set](set-stage.md)
+ [\$1setDifference](setDifference.md)
+ [\$1setEquals](setEquals.md)
+ [\$1setIntersection](setIntersection.md)
+ [\$1setIsSubset](setIsSubset.md)
+ [\$1setUnion](setUnion.md)
+ [\$1skip](skip.md)
+ [\$1slice](slice.md)
+ [\$1size](size.md)
+ [\$1sort](sort.md)
+ [\$1split](split.md)
+ [\$1sqrt](sqrt.md)
+ [\$1strLenBytes](strLenBytes.md)
+ [\$1strLenCP](strLenCP.md)
+ [\$1strcasecmp](strcasecmp.md)
+ [\$1substr](substr.md)
+ [\$1substrBytes](substrBytes.md)
+ [\$1substrCP](substrCP.md)
+ [\$1subtract](subtract.md)
+ [\$1sum](sum.md)
+ [\$1switch](switch.md)
+ [\$1 à Bool](toBool.md)
+ [\$1 à ce jour](toDate.md)
+ [\$1 en décimal](toDecimal.md)
+ [\$1 à doubler](toDouble.md)
+ [\$1 en INT](toInt.md)
+ [\$1 trop 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)
+ [\$1VectorSearch](vectorSearch.md)
+ [\$1week](week.md)
+ [\$1year](year.md)
+ [\$1zip](zip.md)

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

L'`$$DESCEND`opérateur dans Amazon DocumentDB est un opérateur de tableau positionnel spécial utilisé au cours de la `$redact` phase de pipeline. Il indique au pipeline d'agrégation de descendre dans le document actuel et de traiter tous les champs, quel que soit leur niveau d'imbrication.

Lorsque le `$redact` stage rencontre l'`$$DESCEND`opérateur, tous les champs du document actuel restent visibles et les traitent plus loin dans le pipeline. Cela est utile lorsque vous souhaitez supprimer ou affiner de manière sélective certains champs en fonction d'une condition, tout en conservant la structure du document.

**Paramètres**

Aucune.

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

Dans cet exemple, nous allons utiliser la `$redact` scène avec l'`$$DESCEND`opérateur pour afficher de manière sélective les documents dont le `code` champ est égal à « Reg ».

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="DESCEND-code"></a>

Pour afficher un exemple de code d'utilisation de la `$$DESCEND` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

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

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

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

redactPatients();
```

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

```
from pymongo import MongoClient

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

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

    print(result)
    client.close()

redact_patients()
```

------

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

La variable `$$KEEP` système est utilisée avec le `$redact` stage dans le pipeline d'agrégation pour conserver le document ou le champ actuel inchangé et l'inclure dans la sortie.

**Paramètres**

Aucune

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

L'exemple suivant illustre l'utilisation de `$$KEEP` dans un pipeline d'agrégation Amazon DocumentDB. Les documents ne sont conservés que si l'accès est « public », sinon ils sont supprimés.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="KEEP-code"></a>

Pour afficher un exemple de code d'utilisation de la `$$KEEP` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

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

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

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

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

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

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

```
from pymongo import MongoClient

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

db = client.test
articles = db.articles

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

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

client.close()
```

------

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

La variable `$$PRUNE` système est utilisée avec l'`$redact`étape du pipeline d'agrégation pour exclure des documents ou des niveaux de document intégrés des résultats. Lorsqu'une condition est évaluée à`$$PRUNE`, le document ou sous-document actuel est supprimé de la sortie. Il est généralement utilisé avec `$$DESCEND` (pour conserver et parcourir le document) ou `$$KEEP` (pour conserver le document à tous les niveaux).

**Paramètres**

Aucune. La variable `$$PRUNE` système est utilisée sans aucun paramètre et doit être utilisée avec`$redact`.

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

L'exemple suivant montre comment utiliser `$$PRUNE` with `$redact` pour exclure les utilisateurs âgés de plus de 30 ans des résultats.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="PRUNE-code"></a>

Pour afficher un exemple de code d'utilisation de la `$$PRUNE` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

------

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

L'`$ROOT`opérateur dans Amazon DocumentDB est utilisé pour référencer l'intégralité du document d'entrée dans un pipeline d'agrégation. Il vous permet d'accéder au document complet et de le manipuler, y compris tous ses champs et structures imbriqués.

**Paramètres**

Aucune

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

Cet exemple montre comment `$ROOT` créer un journal d'audit qui capture le document original complet ainsi que les métadonnées indiquant le moment où il a été traité.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="ROOT-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$ROOT` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB renvoie la valeur absolue d'un nombre. Il peut être utilisé dans le pipeline d'agrégation pour effectuer des opérations mathématiques sur des champs numériques.

**Paramètres**
+ `number`: expression numérique pour laquelle la valeur absolue sera renvoyée.

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

Cet exemple montre comment utiliser l'`$abs`opérateur pour trouver la valeur absolue d'un champ numérique.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="abs-code"></a>

Pour afficher un exemple de code d'utilisation de la `$abs` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour additionner des nombres ou des dates. Il peut être utilisé pour effectuer des opérations arithmétiques sur des champs numériques ou pour effectuer des opérations arithmétiques de date en ajoutant un certain nombre d'unités de temps à un champ de date.

**Paramètres**
+ `expression1`: premier chiffre ou date à ajouter.
+ `expression2`: deuxième chiffre ou date à ajouter.
+ `expression3`: (facultatif) Chiffres ou dates supplémentaires à ajouter.

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

L'exemple suivant montre comment utiliser l'`$add`opérateur pour additionner deux nombres.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

Dans cet exemple, l'`$add`opérateur est utilisé pour ajouter les valeurs des `b` champs `a` et pour chaque document et pour stocker le résultat dans le `sum` champ.

## Exemples de code
<a name="add-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$add` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur d'`$addToSet`agrégation renvoie un tableau de valeurs uniques à partir d'une expression spécifiée pour chaque groupe. Il est utilisé au cours de la `$group` phase pour accumuler des valeurs distinctes, éliminant ainsi automatiquement les doublons.

**Paramètres**
+ `expression`: expression à évaluer pour chaque document du groupe.

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

L'exemple suivant montre comment utiliser l'`$addToSet`opérateur pour collecter des villes uniques dans lesquelles des commandes ont été passées pour chaque client.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="addToSet-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$addToSet`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

L'`$addFields`étape du pipeline d'agrégation Amazon DocumentDB vous permet d'ajouter de nouveaux champs calculés aux documents. Cela peut être utile pour ajouter des données dérivées ou transformées aux documents.

**Paramètres**
+ `newField`: nom du nouveau champ à ajouter.
+ `expression`: expression qui correspond à la valeur du nouveau champ.

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

L'exemple suivant montre comment `$addFields` ajouter un nouveau champ `TotalInventory` qui calcule l'inventaire total en fonction des `Inventory.OrderQnty` champs `Inventory.OnHand` et.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="addFields-code"></a>

Pour afficher un exemple de code d'utilisation de la `$addFields` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Nouveau depuis la version 4.0

L'`$allElementsTrue`opérateur est utilisé pour vérifier si tous les éléments d'un tableau sont évalués à une valeur vraie.

**Paramètres**
+ `expression`: expression qui correspond à un tableau.

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

L'exemple suivant illustre l'utilisation de `$allElementsTrue` pour vérifier si tous les éléments d'un tableau sont vrais.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

Dans cet exemple, la requête vérifie si tous les éléments du `scores` tableau sont supérieurs à 0. Le document avec `&quot;name&quot;: &quot;Jane&quot;` est exclu car le `scores` tableau contient un 0, qui est une valeur fausse.

## Exemples de code
<a name="allElementsTrue-code"></a>

Pour afficher un exemple de code d'utilisation de la `$allElementsTrue` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur `$and` d'agrégation évalue plusieurs expressions et `true` ne renvoie que si toutes les expressions sont évaluées à`true`. Si une expression l'est`false`, elle est renvoyée`false`.

**Paramètres**
+ `expressions`: tableau d'expressions à évaluer.

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

L'exemple suivant montre comment utiliser l'`$and`opérateur pour vérifier si les produits répondent à plusieurs critères.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="and-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$and`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

Nouveau depuis la version 4.0

L'`$anyElementTrue`opérateur est utilisé pour déterminer si un élément d'un tableau est vrai.

**Paramètres**
+ `field`: champ de tableau à évaluer.

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

L'exemple suivant illustre l'utilisation de `$anyElementTrue` pour vérifier si un élément d'un tableau est vrai.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="anyElementTrue-code"></a>

Pour afficher un exemple de code d'utilisation de la `$anyElementTrue` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB vous permet de récupérer un élément d'un tableau en fonction de sa position d'index. Cela est particulièrement utile lorsque vous devez accéder à un élément spécifique dans un champ de tableau de vos documents.

**Paramètres**
+ `array`: le tableau d'entrée à partir duquel un élément doit être récupéré.
+ `index`: position d'index de base zéro de l'élément à récupérer. Cette valeur doit être un entier non négatif.

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

Dans cet exemple, nous allons montrer comment utiliser l'`$arrayElemAt`opérateur pour récupérer des éléments spécifiques du `flight_miles` tableau de la `miles` collection.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

Dans cet exemple, nous utilisons l'`$arrayElemAt`opérateur pour récupérer les premier et dernier éléments du `flight_miles` tableau pour chaque document.

## Exemples de code
<a name="arrayElemAt-code"></a>

Pour afficher un exemple de code d'utilisation de la `$arrayElemAt` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est l'inverse de l'`$objectToArray`opérateur. Il prend un tableau de documents portant une paire clé-valeur et le convertit en un seul document. Cela est particulièrement utile lorsque vous devez reconvertir un tableau de paires clé-valeur en une structure d'objet ou de document.

**Paramètres**
+ `array expression`: expression qui se résout en un tableau. Les éléments du tableau doivent être des documents comportant deux champs : `k` (la clé) et `v` (la valeur).

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

L'exemple ci-dessous montre comment `$arrayToObject` reconvertir un tableau de paires clé-valeur en document.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

Dans cet exemple, l'`$objectToArray`opérateur est utilisé pour convertir l'`inventory`objet en un tableau de paires clé-valeur. L'`$arrayToObject`opérateur est ensuite utilisé pour reconvertir le tableau en document, rétablissant ainsi la structure de l'objet d'origine.

## Exemples de code
<a name="arrayToObject-code"></a>

Pour afficher un exemple de code d'utilisation de la `$arrayToObject` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur d'`$avg`agrégation dans Amazon DocumentDB calcule la valeur moyenne de l'expression spécifiée dans les documents entrés sur le stage. Cet opérateur est utile pour calculer la moyenne d'un champ ou d'une expression numérique dans un ensemble de documents.

**Paramètres**
+ `expression`: expression à utiliser pour calculer la moyenne. Il peut s'agir d'un chemin de champ (par exemple`"$field"`) ou d'une expression (par exemple`{ $multiply: ["$field1", "$field2"] }`).

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

L'exemple suivant montre comment utiliser l'`$avg`opérateur pour calculer le score moyen sur un ensemble de documents destinés aux étudiants.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="avg-code"></a>

Pour afficher un exemple de code d'utilisation de la `$avg` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Nouveau depuis la version 8.0

Non pris en charge par le cluster Elastic.

L'étape `$bucket` d'agrégation dans Amazon DocumentDB vous permet de regrouper les documents d'entrée dans des compartiments en fonction d'une expression spécifiée et de limites de compartiment. Cela peut être utile pour analyser les données qui se situent dans certaines plages de valeurs ou catégories.

**Paramètres**
+ `groupBy`(obligatoire) : expression qui spécifie la valeur à utiliser pour le regroupement.
+ `boundaries`(obligatoire) : tableau de valeurs doubles qui définit les limites du compartiment. Les documents sont affectés à des compartiments en fonction de la valeur de l'`groupBy`expression comprise dans les limites spécifiées.
+ `default`(facultatif) : valeur littérale produite pour les documents dont la valeur `groupBy` d'expression ne se situe dans aucune des limites spécifiées.
+ `output`(facultatif) : objet qui spécifie les informations à générer pour chaque compartiment. Vous pouvez utiliser des opérateurs d'accumulateur tels que`$sum`, `$avg``$min`, et `$max` pour calculer les agrégations pour chaque compartiment.

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

L'exemple suivant montre comment utiliser l'`$bucket`étape pour regrouper les données de vente par fourchette de prix.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="bucket-code"></a>

Pour afficher un exemple de code d'utilisation de la `$bucket` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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>

Nouveau depuis la version 4.0

L'`$ceil`opérateur dans Amazon DocumentDB, comme dans MongoDB, arrondit un nombre à l'entier supérieur le plus proche. Cela est utile lorsque vous devez effectuer des opérations mathématiques sur des champs numériques et vous assurer que le résultat est un nombre entier.

**Paramètres**
+ `expression`: expression numérique à arrondir.

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

Cet exemple montre comment utiliser l'`$ceil`opérateur pour arrondir un champ numérique.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="ceil-code"></a>

Pour afficher un exemple de code d'utilisation de la `$ceil` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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()
```

------

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

Non pris en charge par le cluster Elastic.

La phase `$changeStream` d'agrégation ouvre un curseur de flux de modifications pour surveiller les modifications en temps réel apportées à une collection. Il renvoie les documents relatifs aux événements de modification lorsque des opérations d'insertion, de mise à jour, de remplacement ou de suppression ont lieu.

**Paramètres**
+ `fullDocument`: Spécifie s'il faut renvoyer le document complet pour les opérations de mise à jour. Les options sont `default` ou `updateLookup`.
+ `resumeAfter`: Facultatif. Jeton de reprise pour continuer à partir d'un point spécifique du flux de modifications.
+ `startAtOperationTime`: Facultatif. Horodatage à partir duquel démarrer le flux de modifications.
+ `allChangesForCluster`: Facultatif. Valeur booléenne. Quand`true`, surveille toutes les modifications apportées au sein du cluster (pour la base de données d'administration). Lorsque `false` (par défaut), surveille uniquement la collection spécifiée.

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

L'exemple suivant montre comment utiliser le `$changeStream` stage pour surveiller les modifications apportées à une collection.

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="changeStream-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la phase d'`$changeStream`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour comparer deux valeurs et renvoyer une valeur entière indiquant leur ordre relatif. Il s'agit d'un opérateur de comparaison qui compare deux expressions et renvoie une valeur entière de -1, 0 ou 1, selon que la première valeur est inférieure, égale ou supérieure à la deuxième valeur, respectivement.

**Paramètres**
+ `expression1`: première expression à comparer.
+ `expression2`: deuxième expression à comparer.

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

L'exemple suivant montre comment utiliser l'`$cmp`opérateur pour comparer deux valeurs numériques.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

Dans cet exemple, l'`$cmp`opérateur compare les `value2` champs `value1` et de chaque document. Le résultat est le suivant :

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

## Exemples de code
<a name="cmp-code"></a>

Pour afficher un exemple de code d'utilisation de la `$cmp` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Voici un exemple d'utilisation de l'`$cmp`opérateur dans une application Node.js avec le `mongodb` pilote :

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

Voici un exemple d'utilisation de l'`$cmp`opérateur dans une application Python avec le `pymongo` pilote :

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

Le résultat des exemples Node.js et Python sera le même que celui de l'exemple 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>

Nouveau depuis la version 4.0

La phase `$collStats` d'agrégation dans Amazon DocumentDB fournit des statistiques sur la collection spécifiée, de la même manière que la `db.collection.stats()` commande du shell MongoDB. Cette étape peut être utilisée pour récupérer des informations sur la collection, telles que le nombre de documents, la taille totale de la collection et divers indicateurs de performance.

**Paramètres**
+ `latencyStats`: (facultatif) Document qui spécifie les options de collecte des statistiques de latence. Ce paramètre n'est pas pris en charge dans Amazon DocumentDB.
+ `recordStats`: (facultatif) Document qui spécifie les options de collecte de statistiques d'enregistrement. Ce paramètre n'est pas pris en charge dans Amazon DocumentDB.
+ `queryExecStats`: (facultatif) Document qui spécifie les options de collecte des statistiques d'exécution des requêtes. Ce paramètre n'est pas pris en charge dans Amazon DocumentDB.

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

L'exemple suivant montre comment utiliser la phase d'`$collStats`agrégation pour récupérer les statistiques relatives à une collection nommée `test` dans la `db` base de données.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="collStats-code"></a>

Pour afficher un exemple de code d'utilisation de la `$collStats` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Voici un exemple d'utilisation de l'étape d'`$collStats`agrégation dans une application Node.js à l'aide du pilote officiel 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 ]

Voici un exemple d'utilisation de l'étape d'`$collStats`agrégation dans une application Python à l'aide du PyMongo pilote :

```
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'opérateur d'`$concat`agrégation dans Amazon DocumentDB concatène (ou combine) plusieurs chaînes dans un document pour produire une chaîne unique qui peut être renvoyée à l'application. Cela réduit le travail effectué dans l'application, car la manipulation des chaînes est effectuée au niveau de la base de données.

**Paramètres**
+ `expression1`: première chaîne à concaténer.
+ `expression2`: deuxième chaîne à concaténer.
+ `...`: chaînes supplémentaires à concaténer (facultatif).

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

Dans cet exemple, nous concaténons le prénom et le nom de famille des utilisateurs pour produire le nom complet de chaque personne.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="concat-code"></a>

Pour afficher un exemple de code d'utilisation de la `$concat` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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'opérateur `$concatArrays` d'agrégation dans Amazon DocumentDB est utilisé pour concaténer deux ou plusieurs tableaux en un seul tableau. Cela peut être utile lorsque vous devez combiner plusieurs tableaux de données en un seul tableau pour un traitement ou une analyse plus poussés.

**Paramètres**
+ `array1`: premier tableau à concaténer.
+ `array2`: le deuxième tableau à concaténer.
+ `[array3, ...]`: (facultatif) Tableaux supplémentaires à concaténer.

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

L'exemple suivant montre comment utiliser l'`$concatArrays`opérateur pour combiner deux tableaux en un seul tableau.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="concatArrays-code"></a>

Pour afficher un exemple de code d'utilisation de la `$concatArrays` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await 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`opérateur dans Amazon DocumentDB est utilisé pour évaluer une expression conditionnelle et renvoyer l'une des deux expressions de résultat possibles.

**Paramètres**
+ `if`: expression booléenne à évaluer.
+ `then`: expression à renvoyer si l'`if`expression est vraie.
+ `else`: expression à renvoyer si l'`if`expression est fausse.

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

L'exemple suivant illustre l'utilisation de l'`$cond`opérateur pour renvoyer une valeur basée sur l'âge d'une personne.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="cond-code"></a>

Pour afficher un exemple de code d'utilisation de la `$cond` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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()
```

------

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

Nouveau depuis la version 4.0

L'`$convert`opérateur d'Amazon DocumentDB est utilisé pour convertir une valeur d'un type de données à un autre. Cet opérateur est utile lorsque vous devez effectuer des opérations sur des données de différents types, telles que la conversion d'une chaîne en nombre ou d'une date en horodatage.

**Paramètres**
+ `to`: type de données cible vers lequel convertir la valeur. Les valeurs prises en charge sont `"string"`, `"double"`, `"long"`, `"int"`, `"date"`, et `"boolean"`.
+ `from`: type de données actuel de la valeur. Si ce n'est pas spécifié, Amazon DocumentDB tentera de détecter automatiquement le type de données.
+ `onError`: (facultatif) La valeur à renvoyer en cas d'échec de la conversion. Il peut s'agir d'une valeur spécifique ou de l'une des valeurs spéciales suivantes :`"null"`,`"zerofill"`, ou`"error"`.
+ `onNull`: (facultatif) La valeur à renvoyer si la valeur d'entrée est`null`. Il peut s'agir d'une valeur spécifique ou de l'une des valeurs spéciales suivantes :`"null"`,`"zerofill"`, ou`"error"`.

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

L'exemple suivant montre comment convertir une valeur de chaîne en date à l'aide de l'`$convert`opérateur.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="convert-code"></a>

Pour afficher un exemple de code d'utilisation de la `$convert` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect("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 phase d'`$count`agrégation dans Amazon DocumentDB est utilisée pour compter le nombre de documents qui passent dans la phase. Il est souvent utilisé comme dernière étape d'un pipeline d'agrégation pour renvoyer le nombre total de documents correspondant aux étapes précédentes.

**Paramètres**
+ `field`: Le champ à compter. Ce paramètre est facultatif, et s'il n'est pas fourni, l'étape comptabilisera le nombre total de documents d'entrée.

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

L'exemple suivant montre comment utiliser le `$count` stage pour obtenir le nombre total de documents d'une collection.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

L'exemple agrège la `users` collection et utilise l'`$count`étape pour compter le nombre total de documents.

## Exemples de code
<a name="count-code"></a>

Pour afficher un exemple de code d'utilisation de la `$count` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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 phase `$currentOp` d'agrégation renvoie des informations sur les opérations en cours dans la base de données. Cette étape est utile pour surveiller les requêtes et les opérations actives dans un pipeline d'agrégation.

**Paramètres**
+ `allUsers`(facultatif) : lorsque ce paramètre est défini sur`true`, renvoie les opérations pour tous les utilisateurs. La valeur par défaut est `false`.
+ `idleConnections`(facultatif) : lorsqu'il est défini sur`true`, inclut les connexions inactives. La valeur par défaut est `false`.
+ `idleCursors`(facultatif) : lorsqu'il est défini sur`true`, inclut des informations sur les curseurs inactifs. La valeur par défaut est `false`.
+ `idleSessions`(facultatif) : lorsque ce paramètre est défini sur`true`, inclut des informations sur les sessions inactives. La valeur par défaut est `true`.
+ `localOps`(facultatif) : lorsqu'il est défini sur`true`, inclut les opérations locales. La valeur par défaut est `false`.

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

L'exemple suivant montre comment utiliser la phase d'`$currentOp`agrégation pour récupérer des informations sur les opérations de lecture actives.

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="currentOp-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$currentOp` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await 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()
```

------

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

Nouveau depuis la version 5.0

L'opérateur `$dateAdd` d'agrégation dans Amazon DocumentDB vous permet d'ajouter une durée à une valeur de date et d'heure.

**Paramètres**
+ `date`: valeur de date et d'heure à laquelle ajouter une durée.
+ `duration`: durée à ajouter à la `date` valeur. Cela peut être spécifié sous la forme d'un objet avec des touches pour `years` `months``weeks`,`days`,`hours`,`minutes`, et`seconds`.
+ `timezone`: (facultatif) Fuseau horaire à utiliser lors de l'ajout de date. S'il n'est pas spécifié, le fuseau horaire par défaut du cluster Amazon DocumentDB est utilisé.

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

L'exemple suivant montre comment utiliser l'`$dateAdd`opérateur pour ajouter 2 jours et 12 heures à une date.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="dateAdd-code"></a>

Pour afficher un exemple de code d'utilisation de la `$dateAdd` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

Nouveau depuis la version 5.0

Non pris en charge par le cluster Elastic.

L'opérateur `$dateDiff` d'agrégation calcule la différence entre deux dates dans des unités spécifiées. Elle renvoie le nombre de limites d'unités franchies entre les dates de début et de fin.

**Paramètres**
+ `startDate`: expression de la date de début.
+ `endDate`: expression de la date de fin.
+ `unit`: unité de temps correspondant à la différence. Les unités prises en charge sont `year` `quarter``month`,`week`,`day`,`hour`,`minute`,,`second`, et`millisecond`.

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

L'exemple suivant montre comment utiliser l'`$dateDiff`opérateur pour calculer le nombre de jours entre le placement de la commande et la livraison.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="dateDiff-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$dateDiff` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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'opérateur `$dateFromString` d'agrégation dans Amazon DocumentDB vous permet de convertir une chaîne date-heure en objet de date. Cela est utile lorsque vos données sont stockées sous forme de chaînes, mais que vous devez effectuer des opérations basées sur la date sur les données.

**Paramètres**
+ `dateString`: chaîne représentant une date et une heure.
+ `format`: (facultatif) Chaîne qui spécifie le format du`dateString`. Si ce n'est pas le cas, Amazon DocumentDB tentera d'analyser la chaîne au format ISO-8601.
+ `timezone`: (facultatif) Chaîne qui indique le fuseau horaire. Si ce n'est pas le cas, Amazon DocumentDB utilisera le fuseau horaire du serveur.
+ `onError`: (facultatif) Spécifie l'action à entreprendre en cas d'échec de la conversion. Les valeurs possibles sont `'error'` (la valeur par défaut, qui génère une erreur), `'null'` (renvoie`null`) ou `'replace'` (remplace la valeur par la chaîne de remplacement spécifiée dans l'`onErrorMessage`option).
+ `onErrorMessage`: (facultatif) Si cette option `onError` est définie sur`'replace'`, cette option indique la chaîne de remplacement.

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

L'exemple suivant montre comment `$dateFromString` convertir une chaîne de date en objet de date dans Amazon DocumentDB.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="dateFromString-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$dateFromString` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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()
```

------

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

Nouveau depuis la version 5.0

L'opérateur `$dateSubtract` d'agrégation dans Amazon DocumentDB vous permet de soustraire une durée spécifiée d'une valeur de date.

**Paramètres**
+ `date`: expression de date qui prend la forme d'une date ou d'un horodatage.
+ `subtrahend`: expression de durée qui indique la durée à soustraire de l'`date`expression.
+ `unit`: chaîne qui indique l'unité de temps de l'`subtrahend`expression. Les unités prises en charge sont « année », « trimestre », « mois », « semaine », « jour », « heure », « minute », « seconde » et « milliseconde ».

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

L'exemple suivant montre comment utiliser l'`$dateSubtract`opérateur pour calculer la date d'il y a un an à partir de la date actuelle.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="dateSubtract-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$dateSubtract` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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'opérateur `$dateToString` d'agrégation dans Amazon DocumentDB est utilisé pour convertir une valeur de date ou d'horodatage en une représentation sous forme de chaîne. Cela est utile lorsque vous devez formater la date et l'heure d'une manière spécifique pour l'affichage ou un traitement ultérieur.

**Paramètres**
+ `date`: valeur de date ou d'horodatage à convertir en chaîne.
+ `format`: chaîne qui indique le format dans lequel la date doit être représentée. La chaîne de format peut inclure différents spécificateurs de format, tels que `%Y` pour l'année à quatre chiffres, `%m` pour le mois à deux chiffres, `%d` pour le jour du mois à deux chiffres, etc.
+ `timezone`: (facultatif) Fuseau horaire à utiliser pour la conversion. S'il n'est pas spécifié, le fuseau horaire du serveur hébergeant le cluster Amazon DocumentDB est utilisé.
+ `onNull`: (facultatif) La valeur à renvoyer si le `date` paramètre est`null`.

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

L'exemple suivant illustre l'utilisation de l'`$dateToString`opérateur pour formater le `logDate` champ de la `missionLog` collection.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="dateToString-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$dateToString` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Voici un exemple d'utilisation de l'`$dateToString`opérateur dans une application Node.js :

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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 ]

Voici un exemple d'utilisation de l'`$dateToString`opérateur dans une application Python :

```
from pymongo import MongoClient

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

Nouveau depuis la version 8.0

Non pris en charge par le cluster Elastic.

L'opérateur `$dateTrunc` d'agrégation dans Amazon DocumentDB tronque une date selon une unité spécifiée.

**Paramètres**
+ `date`: expression de date qui prend la forme d'une date ou d'un horodatage.
+ `unit`: chaîne qui indique l'unité de temps pour l'expression subtrahend. Les unités prises en charge sont `year` `quarter``month`,`week`,`day`,`hour`,`minute`,`second`, et`millisecond`.

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

L'exemple suivant montre comment utiliser l'`$dateTrunc`opérateur pour tronquer une date à l'heure près.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="dateTrunc-code"></a>

Pour afficher un exemple de code d'utilisation de la `$dateTrunc` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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'opérateur d'`$dayOfMonth`agrégation dans Amazon DocumentDB récupère le jour du mois (du 1 au 31) pour une date donnée. Cet opérateur est utile pour regrouper, filtrer ou extraire le jour du mois à partir des champs de date de vos documents.

**Paramètres**
+ `date expression`: L'expression de date peut être un champ de date du document, un objet de date ou une chaîne de date.

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

Cet exemple montre comment utiliser l'`$dayOfMonth`opérateur pour extraire le jour du mois d'un champ de date du document.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="dayOfMonth-code"></a>

Pour afficher un exemple de code d'utilisation de la `$dayOfMonth` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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`opérateur d'Amazon DocumentDB extrait le jour de la semaine à partir d'un champ de date donné. Il renvoie le jour de la semaine sous la forme d'un nombre compris entre 1 (dimanche) et 7 (samedi), ce qui correspond au même comportement que dans MongoDB.

**Paramètres**
+ `date field`: le champ de date à partir duquel extraire le jour de la semaine.

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

Cet exemple montre comment utiliser l'`$dayOfWeek`opérateur pour extraire le jour de la semaine du `date` champ de la `weather` collection.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="dayOfWeek-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$dayOfWeek` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Dans Amazon DocumentDB, l'`$dayOfYear`opérateur renvoie le jour de l'année pour une date sous la forme d'un nombre compris entre 1 et 366 (365 pour les années non bissextiles).

**Paramètres**
+ `expression`: champ ou expression de date à partir duquel extraire le jour de l'année.

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

Cet exemple montre comment utiliser l'`$dayOfYear`opérateur pour extraire le jour de l'année d'un champ de date dans une collection Amazon DocumentDB.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="dayOfYear-code"></a>

Pour afficher un exemple de code d'utilisation de la `$dayOfYear` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur du pipeline d'agrégation Amazon DocumentDB est utilisé pour diviser un nombre par un autre. Il s'agit d'un opérateur utile pour effectuer des opérations mathématiques sur des champs numériques dans vos documents.

**Paramètres**
+ `numerator`: Le dividende ou le nombre à diviser.
+ `denominator`: Le diviseur ou le nombre par lequel diviser.

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

Cet exemple montre comment utiliser l'`$divide`opérateur pour calculer le taux horaire des employés en fonction de leur salaire annuel et du nombre d'heures de travail par an.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="divide-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$divide` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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'opérateur d'`$eq`agrégation compare deux valeurs et renvoie `true` si elles sont égales, sinon renvoie`false`.

**Paramètres**
+ `expression1`: première valeur à comparer.
+ `expression2`: deuxième valeur à comparer.

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

L'exemple suivant montre comment utiliser l'`$eq`opérateur pour vérifier si les quantités de produits correspondent aux valeurs cibles.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="eq-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$eq`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

Nouveau depuis la version 4.0

L'`$exp`opérateur d'Amazon DocumentDB vous permet d'augmenter la constante e à un nombre donné.

**Paramètres**
+ `expression`: expression à évaluer. Il peut s'agir de n'importe quelle expression d'agrégation valide, y compris des références de champs, des opérations arithmétiques et d'autres étapes d'agrégation.

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

L'exemple suivant montre comment utiliser l'`$exp`opérateur pour rechercher tous les documents dont le `quantity` champ est supérieur au `price` champ.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="exp-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$exp` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur d'Amazon DocumentDB est utilisé pour appliquer une expression de filtre à chaque élément d'un tableau et renvoyer un tableau contenant uniquement les éléments répondant à la condition spécifiée. Cet opérateur est utile lorsque vous devez effectuer des opérations de filtrage complexes sur des champs de tableau dans vos documents.

**Paramètres**
+ `input`: champ du tableau à filtrer.
+ `as`: nom de variable à utiliser pour chaque élément du `input` tableau dans l'`cond`expression.
+ `cond`: expression booléenne qui détermine si un élément donné doit être inclus dans le tableau de sortie.

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

L'exemple suivant montre comment utiliser l'`$filter`opérateur pour projeter le client de chaque commande et créer un nouveau champ de tableau PaidItems contenant uniquement les articles du tableau d'articles dont le prix est supérieur à 15. Essentiellement, il filtre les articles de chaque commande pour inclure uniquement les produits qui coûtent plus de 15€.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="filter-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$filter` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Nouveau depuis la version 5.0.

Non pris en charge par le cluster Elastic.

L'`$first`opérateur d'Amazon DocumentDB renvoie le premier document d'un ensemble groupé de documents. Il est couramment utilisé dans les pipelines d'agrégation pour récupérer le premier document correspondant à une condition spécifique.

**Paramètres**
+ `expression`: expression à renvoyer comme première valeur de chaque groupe.

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

L'exemple suivant illustre l'utilisation de l'`$first`opérateur pour récupérer la première valeur d'élément rencontrée pour chaque catégorie lors de l'agrégation.

Remarque : `$first` renvoie le premier document en fonction de l'ordre actuel des documents dans le pipeline. Pour garantir une commande spécifique (par exemple, date limite, prix, etc.), une `$sort` étape doit être utilisée avant l'`$group`étape.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="first-code"></a>

Pour afficher un exemple de code d'utilisation de la `$first` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Nouveau depuis la version 4.0.

L'`$floor`opérateur dans Amazon DocumentDB renvoie le plus grand entier inférieur ou égal au nombre spécifié. Cet opérateur est utile pour arrondir les valeurs numériques.

**Paramètres**
+ `expression`: expression numérique à arrondir au chiffre inférieur.

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

L'exemple suivant illustre l'utilisation de l'`$floor`opérateur pour arrondir une valeur décimale à l'entier le plus proche.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="floor-code"></a>

Pour afficher un exemple de code d'utilisation de la `$floor` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

L'étape `$geoNear` d'agrégation renvoie les documents par ordre de proximité par rapport à un point spécifié. Il calcule la distance par rapport au point et inclut la distance dans les documents de sortie.

**Paramètres**
+ `near`: point à partir duquel calculer les distances, spécifié sous forme de coordonnées GeoJSON ou d'anciennes coordonnées.
+ `distanceField`: nom du champ pour stocker la distance calculée.
+ `spherical`: booléen indiquant s'il faut utiliser une géométrie sphérique (obligatoire pour les points GeoJSON).
+ `maxDistance`: Facultatif. Distance maximale par rapport au point central.
+ `minDistance`: Facultatif. Distance minimale par rapport au point central.
+ `query`: Facultatif. Critères de filtre supplémentaires à appliquer.
+ `limit`: Facultatif. Nombre maximum de documents à renvoyer.
+ `key`: Facultatif. Champ à utiliser pour les requêtes géospatiales lorsque plusieurs index géospatiaux existent.

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

L'exemple suivant montre comment utiliser la `$geoNear` scène pour rechercher les magasins les plus proches d'un emplacement donné.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="geoNear-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la phase d'`$geoNear`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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 phase d'`$group`agrégation dans Amazon DocumentDB vous permet de regrouper des documents selon une expression spécifiée et d'effectuer diverses opérations cumulatives sur les données groupées. Cela peut être utile pour des tâches telles que le calcul de totaux, de moyennes ou d'autres statistiques basées sur les données groupées.

**Paramètres**
+ `_id`: Spécifie l'expression selon laquelle les documents d'entrée doivent être regroupés. Il peut s'agir d'un nom de champ, d'une expression calculée ou d'une combinaison des deux.
+ `accumulator expressions`: (facultatif) Une ou plusieurs expressions d'accumulateur à appliquer aux données groupées. Ces expressions utilisent les opérateurs d'accumulateur mentionnés ci-dessus.

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

L'exemple suivant regroupe les clients par ville et calcule le montant total de la commande pour chaque ville.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="group-code"></a>

Pour afficher un exemple de code d'utilisation de la `$group` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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'opérateur d'`$gt`agrégation compare deux valeurs et renvoie `true` si la première valeur est supérieure à la seconde, sinon renvoie`false`.

**Paramètres**
+ `expression1`: première valeur à comparer.
+ `expression2`: deuxième valeur à comparer.

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

L'exemple suivant montre comment utiliser l'`$gt`opérateur pour identifier les produits dépassant un seuil de prix.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="gt-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$gt`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur d'`$gte`agrégation compare deux valeurs et renvoie `true` si la première valeur est supérieure ou égale à la seconde, sinon renvoie`false`.

**Paramètres**
+ `expression1`: première valeur à comparer.
+ `expression2`: deuxième valeur à comparer.

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

L'exemple suivant montre comment utiliser l'`$gte`opérateur pour vérifier si les étudiants ont réussi un examen.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="gte-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$gte`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur extrait le composant horaire d'un champ de date ou d'horodatage.

**Paramètres**
+ `dateExpression`: Date à laquelle l'opérateur est appliqué. Cela doit aboutir à une date BSON valide (par exemple, un champ tel que \$1createdAt ou un littéral de date).

Un paramètre peut également être spécifié sous forme de document au format suivant :

\$1date :`&lt;dateExpression&gt;`, fuseau horaire :`&lt;timezoneExpression&gt;`\$1

Cela permet d'appliquer des opérations de date tenant compte du fuseau horaire.

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

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

L'exemple suivant montre comment utiliser l'`$hour`opérateur pour extraire le composant horaire d'un champ de date et regrouper les données en conséquence.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

Cette requête regroupe les événements par le composant horaire du `timestamp` champ et compte le nombre d'événements pour chaque heure.

## Exemples de code
<a name="hour-code"></a>

Pour afficher un exemple de code d'utilisation de la `$hour` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur est utilisé pour renvoyer une valeur spécifiée si l'expression d'entrée est nulle ou non définie. Cet opérateur peut être utile dans les scénarios où vous souhaitez fournir une valeur par défaut ou gérer null/undefined des cas.

**Paramètres**
+ `expression`: expression à évaluer.
+ `replacement`: valeur à renvoyer si l'`<expression>`évaluation est nulle ou indéfinie.

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

L'exemple suivant illustre l'utilisation de l'`$ifNull`opérateur pour fournir une valeur par défaut lorsque le `name` champ est nul ou non défini.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="ifNull-code"></a>

Pour afficher un exemple de code d'utilisation de la `$ifNull` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur `$in` d'agrégation vérifie si une valeur spécifiée existe dans un tableau. Elle renvoie `true` si la valeur est trouvée dans le tableau, et `false` sinon.

**Paramètres**
+ `value`: valeur à rechercher.
+ `array`: le tableau dans lequel effectuer la recherche.

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

L'exemple suivant montre comment utiliser l'`$in`opérateur pour vérifier si une compétence spécifique existe dans l'ensemble de compétences de chaque employé.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="in-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$in`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour trouver l'index de la première occurrence d'un élément spécifié dans un tableau. Cet opérateur renvoie la position d'index de base zéro du premier élément du tableau qui correspond à la valeur spécifiée. Si la valeur n'est pas trouvée, elle renvoie -1.

**Paramètres**
+ `array`: le tableau à rechercher.
+ `value`: valeur à rechercher dans le tableau.
+ `start`: (facultatif) La position dans le tableau à partir de laquelle démarrer la recherche. La valeur par défaut est 0.

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

L'exemple suivant montre comment utiliser l'indexOfArray opérateur \$1 pour trouver l'indice de la première occurrence de l'élément « mango » dans le tableau « fruits » pour chaque document.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="indexOfArray-code"></a>

Pour afficher un exemple de code d'utilisation de la `$indexOfArray` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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 opérateur \$1 dans Amazon DocumentDB est utilisé pour trouver l'index de départ d'une sous-chaîne dans une chaîne, en fonction de la position des octets des caractères. Cela peut être utile lorsque vous travaillez avec des données texte susceptibles de contenir des caractères multi-octets, tels que ceux trouvés dans des scripts non latins.

**Paramètres**
+ `string`: chaîne de saisie à rechercher.
+ `substring`: La sous-chaîne à rechercher dans la chaîne d'entrée.
+ `[<start>]`: (facultatif) La position de départ (base zéro) de la recherche. Si ce n'est pas indiqué, la recherche commence au début de la chaîne.

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

L'exemple suivant illustre l'utilisation de `$indexOfBytes` pour trouver l'index du premier trait d'union dans un ensemble de chaînes représentant l'emplacement des bureaux.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="indexOfBytes-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$indexOfBytes` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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`opérateur dans Amazon DocumentDB est utilisé pour trouver l'index, en points de code (CP), de la première occurrence d'une sous-chaîne spécifiée dans une expression de chaîne. Cela peut être utile lors de l'analyse et de l'extraction du contenu de champs de chaîne.

**Paramètres**
+ `string expression`: chaîne à rechercher.
+ `substring`: sous-chaîne à rechercher.
+ `[<start>]`: (facultatif) Position de départ de la recherche (index de base zéro). La valeur par défaut est 0.

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

Dans cet exemple, nous utilisons l'`$indexOfCP`opérateur pour trouver l'index de la première occurrence du trait d'union, dans le champ Desk de chaque document.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="indexOfCP-code"></a>

Pour afficher un exemple de code d'utilisation de la `$indexOfCP` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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 phase `$indexStats` d'agrégation dans Amazon DocumentDB fournit un aperçu de l'utilisation des index au sein d'une collection. Cet opérateur vous permet de surveiller les modèles d'accès à vos index, ce qui peut vous aider à prendre des décisions éclairées concernant la gestion et l'optimisation des index.

**Paramètres**

Aucune

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

L'exemple suivant montre comment utiliser l'`$indexStats`opérateur pour analyser l'utilisation de l'index dans une collection Amazon DocumentDB.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

Dans cet exemple, l'`$indexStats`opérateur indique que l'`_id_`index a été consulté 5 fois et que l'`product_1`index a été consulté 10 fois depuis la dernière réinitialisation ou le dernier redémarrage du serveur.

## Exemples de code
<a name="indexStats-code"></a>

Pour afficher un exemple de code d'utilisation de la `$indexStats` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour vérifier si un champ d'un document est un tableau. Cet opérateur peut être utile dans les pipelines d'agrégation et les expressions conditionnelles pour gérer les champs de type tableau.

**Paramètres**
+ `field`: le chemin du champ pour vérifier s'il s'agit d'un tableau.

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

Cet exemple montre comment utiliser l'`$isArray`opérateur pour identifier les documents dont le champ « inventaire » est un tableau.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="isArray-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$isArray` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

L'`$isoDayOfWeek`opérateur dans Amazon DocumentDB renvoie le jour ISO de la semaine pour une date sous forme de valeur entière. Le système de date hebdomadaire ISO définit chaque semaine commençant un lundi et se terminant un dimanche, la semaine 1 étant la semaine contenant le premier jeudi de l'année.

**Paramètres**
+ `expression`: expression de date pour laquelle le jour ISO de la semaine doit être renvoyé.

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

L'exemple suivant montre comment utiliser l'`$isoDayOfWeek`opérateur pour récupérer le jour ISO de la semaine pour un ensemble de documents d'événements.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="isoDayOfWeek-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$isoDayOfWeek` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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`opérateur dans Amazon DocumentDB renvoie le numéro de semaine ISO pour une date. Le système de date hebdomadaire ISO est un moyen de numéroter les semaines d'une année, la première semaine d'une nouvelle année étant la semaine qui contient le premier jeudi de cette année. Ceci est différent du calendrier grégorien, où la première semaine d'une nouvelle année est la semaine qui contient le 1er janvier.

**Paramètres**

Aucune

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

L'exemple suivant montre comment utiliser l'`$isoWeek`opérateur pour récupérer le numéro de semaine ISO pour une date donnée.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="isoWeek-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$isoWeek` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

Dans Amazon DocumentDB, `$isoWeekYear` l'opérateur renvoie le numéro de semaine et d'année ISO 8601 pour une date donnée. Le numéro de l'année hebdomadaire ISO diffère de l'année civile grégorienne en ce sens que l'année hebdomadaire peut être différente de l'année civile, en particulier au début et à la fin de l'année.

**Paramètres**
+ `expression`: expression de date pour laquelle le numéro de semaine et d'année ISO 8601 doit être renvoyé.

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

Cet exemple montre comment utiliser l'`$isoWeekYear`opérateur pour récupérer l'année hebdomadaire ISO 8601 pour le champ de date de chaque document de la collection d'événements.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="isoWeekYear-code"></a>

Pour afficher un exemple de code d'utilisation de la `$isoWeekYear` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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`opérateur dans Amazon DocumentDB est utilisé pour renvoyer le dernier élément d'un tableau qui correspond aux critères de requête. Il est particulièrement utile pour récupérer le plus récent ou le dernier élément d'un tableau qui répond à une condition spécifique.

**Paramètres**
+ `expression`: expression correspondant aux éléments du tableau.

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

L'exemple suivant montre l'utilisation de l'`$last`opérateur en combinaison avec `$filter` pour récupérer le dernier élément d'un tableau qui répond à une condition spécifique (par exemple, le sujet est « science »).

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="last-code"></a>

Pour afficher un exemple de code d'utilisation de la `$last` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour lier des variables à des valeurs et utiliser ces variables dans l'expression. Il vous permet de définir des variables locales qui peuvent être utilisées dans les expressions suivantes au cours de la même étape du pipeline d'agrégation.

**Paramètres**
+ `vars`: objet qui définit les variables à utiliser dans l'expression.
+ `in`: expression dans laquelle les variables définies dans le paramètre vars sont utilisées.

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

Cet exemple montre comment utiliser l'`$let`opérateur pour calculer l'aire d'un rectangle.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="let-code"></a>

Pour afficher un exemple de code d'utilisation de la `$let` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour limiter le nombre de documents renvoyés par une requête. Il est similaire à l'`$limit`opérateur MongoDB, mais son utilisation avec Amazon DocumentDB comporte certaines considérations spécifiques.

Dans Amazon DocumentDB, l'`$limit`opérateur est utile pour la pagination, lorsque vous souhaitez récupérer un sous-ensemble du total des documents correspondants. Il vous permet de contrôler le nombre de documents renvoyés dans chaque réponse, d'améliorer les performances et de réduire la quantité de données transférées sur le réseau.

**Paramètres**
+ `limit`: Le nombre maximum de documents à renvoyer. Il doit s'agir d'une valeur entière non négative.

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

L'exemple suivant montre comment utiliser l'`$limit`opérateur pour renvoyer au maximum un document correspondant au filtre donné.

**Création d'exemples de documents**

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

**Exemple de requête**

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

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

**Sortie**

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

## Exemples de code
<a name="limit-code"></a>

Pour afficher un exemple de code d'utilisation de la `$limit` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour représenter une valeur littérale au sein d'une étape de pipeline d'agrégation. Il vous permet d'inclure une valeur spécifique, telle qu'un nombre, une chaîne ou un booléen, sans l'interpréter comme une référence de champ ou une expression.

Cet opérateur est particulièrement utile lorsque vous devez inclure une valeur littérale dans le cadre d'un pipeline d'agrégation plus complexe, par exemple lors de la création de filtres de requêtes dynamiques ou de l'exécution de calculs.

**Paramètres**

Aucune

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

L'exemple suivant illustre l'utilisation de l'`$literal`opérateur pour inclure une valeur littérale dans un pipeline d'agrégation. L'`$literal`opérateur est utilisé pour inclure la valeur 18 en tant que valeur littérale dans l'expression \$1gt. Cela permet au pipeline d'agrégation de comparer le champ d'âge à la valeur littérale 18 pour déterminer si la personne est un adulte.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="literal-code"></a>

Pour afficher un exemple de code d'utilisation de la `$literal` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

Nouveau depuis la version 4.0.

L'`$ln`opérateur dans Amazon DocumentDB calcule le logarithme naturel (base e) d'un nombre spécifié. Elle renvoie le logarithme du nombre à la base e.

**Paramètres**
+ `expression`: Le nombre pour lequel le logarithme naturel sera calculé.

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

L'exemple suivant illustre l'utilisation de l'`$log`opérateur pour calculer le logarithme naturel d'un nombre.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="ln-code"></a>

Pour afficher un exemple de code d'utilisation de la `$ln` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

Nouveau depuis la version 4.0.

L'`$log`opérateur dans Amazon DocumentDB calcule le logarithme naturel d'un nombre. Elle renvoie le logarithme en base e du nombre spécifié.

**Paramètres**
+ `expression`: Le nombre pour lequel le logarithme naturel sera calculé.
+ `base`: valeur de base pour calculer le log.

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

L'exemple suivant illustre l'utilisation de l'`$log`opérateur pour calculer le logarithme naturel d'un nombre.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="log-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$log` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

Nouveau depuis la version 4.0.

L'`$log10`opérateur dans Amazon DocumentDB est utilisé pour calculer le logarithme en base 10 d'un nombre. Il est utile pour effectuer des calculs logarithmiques sur des champs numériques au sein du pipeline d'agrégation.

**Paramètres**
+ `expression`: expression numérique pour laquelle le logarithme en base 10 doit être calculé.

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

L'exemple suivant montre comment utiliser l'`$log10`opérateur pour calculer le logarithme en base 10 d'un champ numérique.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="log10-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$log10` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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'opérateur d'`$lt`agrégation compare deux valeurs et renvoie `true` si la première valeur est inférieure à la seconde, sinon renvoie`false`.

**Paramètres**
+ `expression1`: première valeur à comparer.
+ `expression2`: deuxième valeur à comparer.

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

L'exemple suivant montre comment utiliser l'`$lt`opérateur pour identifier les articles en faible stock.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="lt-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$lt`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur d'`$lte`agrégation compare deux valeurs et renvoie `true` si la première valeur est inférieure ou égale à la seconde, sinon renvoie`false`.

**Paramètres**
+ `expression1`: première valeur à comparer.
+ `expression2`: deuxième valeur à comparer.

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

L'exemple suivant montre comment utiliser l'`$lte`opérateur pour identifier les articles économiques.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="lte-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$lte`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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 phase `$lookup` d'agrégation dans Amazon DocumentDB vous permet d'effectuer une jointure externe gauche entre deux collections. Cette opération vous permet de combiner les données de plusieurs collections en fonction des valeurs de champ correspondantes. Cela est particulièrement utile lorsque vous devez intégrer des données provenant de collections connexes dans les résultats de vos requêtes.

**Paramètres**
+ `from`: nom de la collection avec laquelle effectuer la jointure.
+ `localField`: Le champ des documents d'entrée à mettre en correspondance avec le`foreignField`.
+ `foreignField`: Le champ des documents de la `from` collection à mettre en correspondance avec le`localField`.
+ `as`: nom du nouveau champ à ajouter aux documents de sortie contenant les documents correspondants de la `from` collection.

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

L'exemple suivant illustre une `$lookup` opération simple qui permet de joindre les données de la `orders` collection à la `customers` collection.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="lookup-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$lookup` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function 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>

Nouveau depuis la version 4.0.

Non pris en charge par le cluster Elastic.

L'`$ltrim`opérateur dans Amazon DocumentDB est utilisé pour supprimer les premiers caractères d'une chaîne. Par défaut, il supprime les premiers espaces, mais vous pouvez également spécifier un ensemble de caractères à supprimer en transmettant l'argument chars.

**Paramètres**
+ `input`: chaîne d'entrée à partir de laquelle les espaces blancs en tête doivent être supprimés.
+ `chars`: (facultatif) Pour supprimer des caractères spécifiques.

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

L'exemple suivant illustre l'utilisation de `$ltrim` pour supprimer les caractères spécifiés (« \$1 ») au début d'une chaîne.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="ltrim-code"></a>

Pour afficher un exemple de code d'utilisation de la `$ltrim` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function 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`opérateur d'Amazon DocumentDB vous permet d'appliquer une expression spécifiée à chaque élément d'un tableau et de renvoyer un nouveau tableau contenant les éléments transformés. Cet opérateur est particulièrement utile pour manipuler et transformer des données au sein de tableaux, ce qui peut contribuer à simplifier le code de votre application et à améliorer les performances des requêtes en reportant le traitement des tableaux au niveau de la base de données.

**Paramètres**
+ `input`: Le tableau à transformer.
+ `as`: (facultatif) Le nom de la variable à utiliser dans l'expression in pour représenter l'élément en cours de traitement.
+ `in`: expression à appliquer à chaque élément du tableau d'entrée.

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

L'exemple suivant montre comment utiliser l'opérateur \$1map pour transformer un tableau de nombres, en doublant chaque valeur.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="map-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$map` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

L'étape du `$match` pipeline dans Amazon DocumentDB est utilisée pour filtrer les documents d'entrée uniquement en fonction de ceux qui répondent aux critères de requête spécifiés. Il s'agit de l'une des étapes de pipeline les plus couramment utilisées dans les opérations d'agrégation. L'`$match`étape est appliquée avant toute autre étape du pipeline, ce qui vous permet de réduire efficacement le nombre de documents à traiter lors des étapes suivantes.

**Paramètres**
+ `query`: document qui exprime les critères de sélection de l'opération. Le document de requête utilise la même syntaxe que la `find()` méthode.

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

L'exemple suivant montre comment utiliser le `$match` stage pour filtrer des documents en fonction d'une valeur de champ spécifique.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

La `$match` phase filtre les documents pour n'inclure que ceux dont le `age` champ est supérieur à 30.

## Exemples de code
<a name="match-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$match` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

L'étape d'`$max`agrégation est utilisée pour renvoyer la valeur maximale d'un champ spécifié dans tous les documents d'une étape de pipeline. Cet opérateur est utile pour trouver la valeur la plus élevée dans un ensemble de documents.

**Paramètres**
+ `expression`: expression à utiliser pour calculer la valeur maximale.

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

L'exemple suivant montre comment utiliser l'`$max`opérateur pour trouver le score maximal dans un ensemble de documents destinés aux étudiants. L'`$group`étape regroupe tous les documents et l'`$max`opérateur est utilisé pour calculer la valeur maximale du `score` champ pour tous les documents.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="max-code"></a>

Pour afficher un exemple de code d'utilisation de la `$max` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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'opérateur `$meta` d'agrégation accède aux métadonnées associées aux documents dans un pipeline d'agrégation. Il est couramment utilisé pour récupérer les scores de recherche de texte et trier les résultats par pertinence.

**Paramètres**
+ `textScore`: Récupère le score de recherche textuel indiquant la pertinence du document par rapport à la requête de recherche.

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

L'exemple suivant montre comment utiliser l'`$meta`opérateur dans un pipeline d'agrégation pour récupérer et trier par résultats de recherche textuelle.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="meta-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$meta`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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()
```

------

# \$1 fusion
<a name="merge"></a>

Introduit dans la version 8.0

L'étape d'`$merge`agrégation dans Amazon DocumentDB est utilisée pour fusionner les résultats de l'étape de pipeline précédente dans une collection cible. Cela est utile pour mettre à jour ou insérer des documents dans une collection cible en fonction des données des documents d'entrée.

L'`$merge`étape vous permet d'effectuer diverses actions en fonction de la condition de correspondance entre les documents d'entrée et la collection cible, telles que :

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

**Paramètres**
+ `into`: (obligatoire) Le nom de la collection cible dans laquelle fusionner les documents d'entrée.
+ `on`: (obligatoire) Le ou les champs à utiliser comme condition de correspondance entre les documents d'entrée et la collection cible.
+ `whenMatched`: (facultatif) Action à effectuer lorsque le document d'entrée correspond à un document existant dans la collection cible. Les valeurs prises en charge sont `"merge"`, `"replace"`, `"keepExisting"` et `"fail"`.
+ `whenNotMatched`: (facultatif) Action à effectuer lorsque le document d'entrée ne correspond à aucun document de la collection cible. Les valeurs prises en charge sont les suivantes : `"insert"` et`"fail"`.

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

L'exemple suivant montre comment utiliser le `$merge` stage pour mettre à jour une `users` collection avec de nouvelles données provenant d'un pipeline d'entrée.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

Après avoir exécuté le `$merge` pipeline, la `users` collection contiendra les documents suivants :

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

## Exemples de code
<a name="merge-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$merge` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Voici un exemple d'utilisation de l'opérateur \$1merge dans une application Node.js :

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

async function example() {
  const client = await MongoClient.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 ]

Voici un exemple d'utilisation de l'opérateur \$1merge dans une application Python :

```
from pymongo import MongoClient

def 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`opérateur d'Amazon DocumentDB est utilisé pour combiner plusieurs documents ou objets en un seul document. Cet opérateur est particulièrement utile lorsque vous devez fusionner le contenu de deux ou plusieurs documents ou objets, ce qui peut remplacer les valeurs d'un objet par celles d'un autre.

**Paramètres**
+ `expression1`: premier objet à être fusionné.
+ `expression2`: (facultatif) Le deuxième objet à fusionner.
+ `expression3`: (facultatif) Objets supplémentaires à fusionner.

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

L'exemple suivant montre comment utiliser l'`$mergeObjects`opérateur pour combiner deux objets.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="mergeObjects-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$mergeObjects` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour extraire la portion en millisecondes d'une valeur de date.

**Paramètres**

Aucune

## Exemple (MongoDB Shell)
<a name="millisecond-examples"></a>

Cet exemple montre comment utiliser l'`$millisecond`opérateur pour extraire la portion en millisecondes d'une valeur de date.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.events.aggregate([
  {
    $project: {
      name: 1,
      milliseconds: { $millisecond: "$timestamp" }
    }
  }
])
```

**Sortie**

```
[
  {
    "_id": ObjectId("644332a42054ed1b0d15f0c1"),
    "name": "Event 1",
    "milliseconds": 123
  },
  {
    "_id": ObjectId("644332a42054ed1b0d15f0c2"),
    "name": "Event 2",
    "milliseconds": 456
  },
  {
    "_id": ObjectId("644332a42054ed1b0d15f0c3"),
    "name": "Event 3",
    "milliseconds": 789
  }
]
```

## Exemples de code
<a name="millisecond-code"></a>

Pour afficher un exemple de code d'utilisation de la `$millisecond` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur renvoie la valeur minimale à partir d'un tableau de valeurs. Il peut être utilisé dans les étapes d'agrégation pour trouver la valeur minimale d'un champ spécifique dans plusieurs documents.

**Paramètres**
+ `expression`: expression à évaluer. Il peut s'agir d'un chemin de champ, d'une variable ou de toute expression aboutissant à une valeur.

## Exemple (MongoDB Shell)
<a name="min-examples"></a>

L'exemple suivant montre comment utiliser l'`$min`opérateur pour trouver la valeur minimale du `age` champ dans plusieurs documents.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.users.aggregate([
  { $group: { _id: null, minAge: { $min: "$age" } } },
  { $project: { _id: 0, minAge: 1 } }
])
```

**Sortie**

```
[ { minAge: 28 } ]
```

## Exemples de code
<a name="min-code"></a>

Pour afficher un exemple de code d'utilisation de la `$min` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

L'étape du pipeline d'`$minute`agrégation dans Amazon DocumentDB extrait la valeur des minutes d'un champ de date ou d'horodatage.

Cet opérateur est utile lorsque vous devez effectuer des calculs basés sur la date et l'heure ou des regroupements au sein de votre pipeline d'agrégation.

**Paramètres**
+ `expression`: champ de date ou d'horodatage à partir duquel extraire la valeur des minutes.

## Exemple (MongoDB Shell)
<a name="minute-examples"></a>

L'exemple suivant montre comment utiliser l'`$minute`opérateur pour regrouper les documents en fonction de la valeur minute extraite du champ d'horodatage et pour compter le nombre de documents dans chaque groupe.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

```
[
  { "_id": { "minute": 30 }, "count": 2 },
  { "_id": { "minute": 31 }, "count": 2 },
  { "_id": { "minute": 32 }, "count": 1 }
]
```

## Exemples de code
<a name="minute-code"></a>

Pour afficher un exemple de code d'utilisation de la `$minute` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur est un opérateur arithmétique qui effectue une opération modulo sur un nombre. Elle renvoie le reste de la division d'un nombre par un autre. Cet opérateur est couramment utilisé pour déterminer si un nombre est pair ou impair, ou pour répartir les éléments dans un nombre fini de groupes.

**Paramètres**
+ `expression1`: L'expression du dividende.
+ `expression2`: expression du diviseur.

## Exemple (MongoDB Shell)
<a name="mod-examples"></a>

Cet exemple montre comment utiliser l'`$mod`opérateur pour déterminer le nombre de widgets restants lors de l'expédition par colis de 100.

**Création d'exemples de documents**

```
db.widgets.insertMany([
  { "_id" : 1, "widget" : "A", "count" : 80372 },
  { "_id" : 2, "widget" : "B", "count" : 409282 },
  { "_id" : 3, "widget" : "C", "count" : 60739 }
])
```

**Exemple de requête**

```
db.widgets.aggregate([
  { $addFields: { leftOver: { $mod: [ "$count", 100 ] } } }
])
```

**Sortie**

```
[
  { "_id" : 1, "widget" : "A", "count" : 80372, "leftOver" : 72 },
  { "_id" : 2, "widget" : "B", "count" : 409282, "leftOver" : 82 },
  { "_id" : 3, "widget" : "C", "count" : 60739, "leftOver" : 39 }
]
```

Le résultat indique le reste `count` divisé par 100 pour chaque document, ce qui représente le nombre de widgets restants lors de l'expédition par colis de 100.

## Exemples de code
<a name="mod-code"></a>

Pour afficher un exemple de code d'utilisation de la `$mod` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Dans Amazon DocumentDB, l'`$month`opérateur renvoie le mois d'une date sous la forme d'un nombre compris entre 1 et 12. Cet opérateur est utile pour extraire le composant mensuel d'un champ de date et pour effectuer des agrégations et des analyses basées sur la date.

**Paramètres**
+ `date_expression`: il s'agit de l'expression ou du champ qui contient la date ou l'horodatage à partir duquel vous souhaitez extraire le mois.

## Exemple (MongoDB Shell)
<a name="month-examples"></a>

L'exemple suivant montre comment utiliser l'`$month`opérateur pour extraire le mois d'un champ de date et regrouper les données par mois.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.sales.aggregate([
  { $group: { 
      _id: { month: { $month: "$date" } },
      totalSales: { $sum: "$price" }
    }},
  { $sort: { "_id.month": 1 } }
]);
```

**Sortie**

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

## Exemples de code
<a name="month-code"></a>

Pour afficher un exemple de code d'utilisation de la `$month` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour multiplier les valeurs de deux ou plusieurs champs ou expressions. Cet opérateur est particulièrement utile pour effectuer des opérations arithmétiques sur des champs numériques dans des documents. Il peut être utilisé à différentes étapes du pipeline d'agrégation, par exemple `$project` et `$addFields` pour créer de nouveaux champs ou modifier des champs existants.

**Paramètres**
+ `expression1`: première expression numérique à multiplier.
+ `expression2`: deuxième expression numérique à multiplier.
+ `[expression3, ...]`: (facultatif) Expressions numériques supplémentaires à multiplier.

## Exemple (MongoDB Shell)
<a name="multiply-examples"></a>

L'exemple suivant montre comment `$multiply` calculer en `bonus_miles` multipliant `base_miles` et `bonus_rate` pour les clients ayant utilisé une carte de crédit pour le voyage.

**Exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="multiply-code"></a>

Pour afficher un exemple de code d'utilisation de la `$multiply` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

------

# \$1naturel
<a name="natural"></a>

L'`$natural`opérateur d'Amazon DocumentDB est utilisé pour trier les documents dans leur ordre naturel, c'est-à-dire l'ordre dans lequel ils ont été insérés dans la collection. Cela contraste avec le comportement de tri par défaut, qui consiste à trier les documents en fonction des valeurs des champs spécifiés.

**Paramètres**

Aucune

## Exemple (MongoDB Shell)
<a name="natural-examples"></a>

L'exemple suivant montre comment utiliser l'`$natural`opérateur pour trier les documents d'une collection dans leur ordre naturel.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.people.find({}, { "_id": 1, "name": 1 }).sort({ "$natural": 1 });
```

**Sortie**

```
[
  { "_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 requête trie les documents de la collection dans leur ordre naturel, c'est-à-dire l'ordre dans lequel ils ont été insérés.

## Exemples de code
<a name="natural-code"></a>

Pour afficher un exemple de code d'utilisation de la `$natural` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur d'`$ne`agrégation compare deux valeurs et renvoie `true` si elles ne sont pas égales, sinon renvoie`false`.

**Paramètres**
+ `expression1`: première valeur à comparer.
+ `expression2`: deuxième valeur à comparer.

## Exemple (MongoDB Shell)
<a name="ne-aggregation-examples"></a>

L'exemple suivant montre comment utiliser l'`$ne`opérateur pour identifier les commandes dont le statut a changé.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.orders.aggregate([
  {
    $project: {
      orderId: 1,
      status: 1,
      expectedStatus: 1,
      needsAttention: { $ne: ["$status", "$expectedStatus"] }
    }
  }
]);
```

**Sortie**

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

## Exemples de code
<a name="ne-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$ne`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur `$not` d'agrégation exécute une opération logique NOT sur une expression. Elle renvoie `true` si l'expression est évaluée à`false`, et `false` si l'expression est évaluée à. `true`

**Paramètres**
+ `expression`: expression à annuler.

## Exemple (MongoDB Shell)
<a name="not-aggregation-examples"></a>

L'exemple suivant montre comment utiliser l'`$not`opérateur pour inverser des valeurs booléennes.

**Création d'exemples de documents**

```
db.users.insertMany([
  { _id: 1, name: "Alice", active: true },
  { _id: 2, name: "Bob", active: false },
  { _id: 3, name: "Charlie", active: true }
]);
```

**Exemple de requête**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      active: 1,
      inactive: { $not: ["$active"] }
    }
  }
]);
```

**Sortie**

```
[
  { _id: 1, name: 'Alice', active: true, inactive: false },
  { _id: 2, name: 'Bob', active: false, inactive: true },
  { _id: 3, name: 'Charlie', active: true, inactive: false }
]
```

## Exemples de code
<a name="not-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$not`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur `$objectToArray` d'agrégation dans Amazon DocumentDB convertit un objet (ou un document) en tableau. L'entrée de l'opérateur est un document, et la sortie consiste en un élément de tableau pour chaque paire champ-valeur du document d'entrée. Cet opérateur est utile lorsque vous devez travailler avec les champs individuels d'un document sous forme de tableau, par exemple lorsque vous souhaitez rechercher le document avec la valeur maximale ou minimale pour un champ particulier.

**Paramètres**
+ `expression`: expression du document à convertir en tableau.

## Exemple (MongoDB Shell)
<a name="objectToArray-examples"></a>

L'exemple suivant montre comment utiliser l'`$objectToArray`opérateur pour trouver le document présentant le stock maximal pour une chaîne de magasins de location de vidéos.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.videos.aggregate([
  {
    $project: {
      name: 1,
      videos: {
        $objectToArray: "$inventory"
      }
    }
  },
  {
    $unwind: "$videos"
  },
  {
    $group: {
      _id: "$name",
      maxInventory: {
        $max: "$videos.v"
      }
    }
  }
]);
```

**Sortie**

```
[
  {
    "_id": "Bravemind",
    "maxInventory": 1000
  },
  {
    "_id": "Live Soft",
    "maxInventory": 1000
  },
  {
    "_id": "Romancing the Rock",
    "maxInventory": 500
  },
  {
    "_id": "Top Pilot",
    "maxInventory": 1000
  }
]
```

## Exemples de code
<a name="objectToArray-code"></a>

Pour afficher un exemple de code d'utilisation de la `$objectToArray` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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'opérateur `$or` d'agrégation évalue plusieurs expressions et renvoie `true` si au moins une expression est évaluée à. `true` Elle `false` ne renvoie que si toutes les expressions le sont`false`.

**Paramètres**
+ `expressions`: tableau d'expressions à évaluer.

## Exemple (MongoDB Shell)
<a name="or-aggregation-examples"></a>

L'exemple suivant montre comment utiliser l'`$or`opérateur pour vérifier si les produits répondent à plusieurs critères.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.items.aggregate([
  {
    $project: {
      name: 1,
      price: 1,
      onSale: 1,
      goodDeal: {
        $or: [
          { $lt: ["$price", 50] },
          { $eq: ["$onSale", true] }
        ]
      }
    }
  }
]);
```

**Sortie**

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

## Exemples de code
<a name="or-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$or`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur d'Amazon DocumentDB est utilisé pour écrire le résultat d'un pipeline d'agrégation dans une collection spécifiée.

`$out`devrait être la dernière étape du pipeline.

**Paramètres**
+ `output_collection`: nom de la collection de sortie dans laquelle écrire les résultats de l'agrégation.

**Remarque** : Si la collection existe déjà, elle sera remplacée par les résultats de la phase d'agrégation.

## Exemple (MongoDB Shell)
<a name="out-examples"></a>

L'exemple suivant montre comment utiliser l'`$out`opérateur dans Amazon DocumentDB pour écrire les résultats d'un pipeline d'agrégation dans une nouvelle collection.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.products.aggregate([
  { $group: { _id: "$category", totalPrice: { $sum: "$price" } } },
  { $out: "product_categories" }
])
```

**Sortie**

Aucune (les résultats sont écrits dans la collection de sortie).

Le pipeline d'agrégation regroupe les produits par catégorie et calcule le prix total des articles pour chaque catégorie. L'`$out`opérateur écrit les résultats dans une nouvelle collection nommée « product\$1categories ».

**Pour afficher les résultats dans la collection de sorties :**

```
db.product_categories.find()
[
{ "_id" : "Books", "totalPrice" : 125 },
{ "_id" : "Electronics", "totalPrice" : 300 }
]
```

## Exemples de code
<a name="out-code"></a>

Pour afficher un exemple de code d'utilisation de la `$out` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Introduit dans la version 8.0

L'`$pow`opérateur d'Amazon DocumentDB vous permet de porter un nombre à une puissance. Cela peut être utile pour effectuer des calculs exponentiels dans votre pipeline d'agrégation.

**Paramètres**
+ `<number>`(obligatoire) : Le nombre à élever à une puissance.
+ `<exponent>`(obligatoire) : puissance à laquelle le nombre doit être augmenté.

## Exemple (MongoDB Shell)
<a name="pow-examples"></a>

L'exemple suivant montre comment utiliser l'`$pow`opérateur pour calculer le carré d'un nombre.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.numbers.aggregate([
  { $addFields: { "square": { $pow: ["$value", 2] } } }
])
```

**Sortie**

```
[
  { "_id": 1, "value": 2, "square": 4 },
  { "_id": 2, "value": 3, "square": 9 },
  { "_id": 3, "value": 4, "square": 16 }
]
```

## Exemples de code
<a name="pow-code"></a>

Pour afficher un exemple de code d'utilisation de la `$pow` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Voici un exemple d'utilisation de l'opérateur \$1pow dans une application Node.js :

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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 ]

Voici un exemple d'utilisation de l'opérateur \$1pow dans une application Python :

```
from pymongo import MongoClient

def 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'opérateur d'`$push`agrégation renvoie un tableau de toutes les valeurs d'une expression spécifiée pour chaque groupe. Il est généralement utilisé au cours de la `$group` phase pour accumuler des valeurs dans un tableau.

**Paramètres**
+ `expression`: expression à évaluer pour chaque document du groupe.

## Exemple (MongoDB Shell)
<a name="push-aggregation-examples"></a>

L'exemple suivant montre comment utiliser l'`$push`opérateur pour collecter tous les noms de produits pour chaque catégorie.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.sales.aggregate([
  {
    $group: {
      _id: "$category",
      products: { $push: "$product" }
    }
  }
]);
```

**Sortie**

```
[
  { _id: 'Furniture', products: [ 'Desk', 'Chair' ] },
  { _id: 'Electronics', products: [ 'Laptop', 'Mouse', 'Keyboard' ] }
]
```

## Exemples de code
<a name="push-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$push`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur d'Amazon DocumentDB vous permet d'inclure ou d'exclure de manière sélective des champs des documents de sortie, de transmettre des valeurs à l'étape suivante du pipeline et de calculer de nouveaux champs à partir des valeurs des documents d'entrée.

**Paramètres**
+ `field`: Le champ à inclure ou à exclure des documents de sortie peut être un chemin de champ (par exemple, « a.b.c »).
+ `1`ou `true` : inclut le champ dans la sortie.
+ `0`ou `false` : exclut le champ de la sortie.

## Exemple (MongoDB Shell)
<a name="project-examples"></a>

L'exemple suivant illustre l'utilisation de l'`$project`opérateur sur la collection des étudiants.

**Création d'exemples de documents**

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

Cette requête inclut uniquement les `math` champs `name` et dans la sortie. Le `_id` champ est inclus par défaut sauf exclusion explicite.

```
db.students.aggregate([
  { $project: { "name": 1, "math": 1 } }
])
```

**Sortie**

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

Cette requête exclut les `_id` champs `grade` et de la sortie, affichant tous les autres champs (`name`,`math`,`science`).

```
db.students.aggregate([
  { $project: { "grade": 0, "_id": 0 } }
])
```

**Sortie**

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

## Exemples de code
<a name="project-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$project` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

Nouveau depuis la version 8.0

L'`$rand`opérateur dans Amazon DocumentDB est utilisé pour générer un nombre aléatoire compris entre 0 et 1.

**Paramètres**

Aucune

## Exemple (MongoDB Shell)
<a name="rand-examples"></a>

L'exemple suivant montre comment utiliser l'`$rand`opérateur pour sélectionner de manière aléatoire deux documents dans la `temp` collection.

**Création d'exemples de documents**

```
db.items.insertMany([
  { "name": "pencil", "quantity": 110 },
  { "name": "pen", "quantity": 159 }
])
```

**Exemple de requête**

```
db.items.aggregate([
  {
    $project: {
      randomValue: { $rand: {} }
    }
  }
])
```

**Sortie**

```
[
  {
    _id: ObjectId('6924a5edd66dcae121d29517'),
    randomValue: 0.8615243955294392
  },
  {
    _id: ObjectId('6924a5edd66dcae121d29518'),
    randomValue: 0.22815483022099903
  }
]
```

## Exemples de code
<a name="rand-code"></a>

Pour afficher un exemple de code d'utilisation de la `$rand` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur d'`$range`agrégation dans Amazon DocumentDB est utilisé pour créer un tableau de nombres consécutifs dans une plage spécifiée. Cet opérateur est particulièrement utile pour générer des séquences de chiffres, telles que des marqueurs de miles pour les postes de ravitaillement lors d'une course, comme le montrent les exemples ci-dessous.

**Paramètres**
+ `start`: valeur de départ de la plage.
+ `end`: valeur finale de la plage.
+ `step`: (facultatif) La valeur d'étape à utiliser lors de la génération de la plage. Si elle n'est pas fournie, la valeur d'étape par défaut est 1.

## Exemple (MongoDB Shell)
<a name="range-examples"></a>

Dans cet exemple, nous allons utiliser l'`$range`opérateur pour générer les bornes kilométriques pour les stations d'eau lors d'une course cycliste.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.races.aggregate([
  {
    $project: {
      race: 1,
      "waterStations": { $range: [20, "$distance", 20] }
    }
  }
]);
```

**Sortie**

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

## Exemples de code
<a name="range-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$range` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function 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>

L'étape d'`$redact`agrégation dans Amazon DocumentDB est utilisée pour inclure ou exclure de manière sélective le contenu des documents de sortie en fonction des valeurs des champs spécifiés. Cela est particulièrement utile dans les scénarios où vous devez contrôler la visibilité des données sensibles en fonction des niveaux d'accès ou des autorisations des utilisateurs.

**Paramètres**
+ `$cond`: expression qui évalue soit pour `$$KEEP``$$PRUNE`, soit `$$DESCEND` pour chaque champ du document.
+ `$$KEEP`: conserve le champ actuel dans le document de sortie.
+ `$$PRUNE`: Supprime le champ actuel du document de sortie.
+ `$$DESCEND`: applique la `$redact` scène de manière récursive au champ actuel, qui est un objet ou un tableau.

## Exemple (MongoDB Shell)
<a name="redact-examples"></a>

Dans cet exemple, nous allons utiliser l'`$redact`étape pour filtrer les commandes en fonction de leur statut, en n'affichant que les commandes avec des valeurs de statut spécifiques.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.orders.aggregate([
  {
    $redact: {
      $cond: {
        if: { $in: ["$status", ["shipped", "processing"]] },
        then: "$$KEEP",
        else: "$$PRUNE"
      }
    }
  }
])
```

**Sortie**

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

Dans cet exemple, l'`$redact`étape vérifie la valeur du `status` champ dans chaque document. S'il `status` est « expédié » ou « en cours de traitement », le document est conservé (`$$KEEP`). Dans le cas contraire, le document est élagué (`$$PRUNE`).

## Exemples de code
<a name="redact-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$redact` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur d'`$reduce`agrégation dans Amazon DocumentDB est utilisé pour appliquer une fonction de deux arguments cumulativement aux éléments d'un tableau afin de réduire le tableau à une seule valeur. Cet opérateur est particulièrement utile pour effectuer des calculs ou des transformations complexes sur des données matricielles au sein du pipeline d'agrégation.

**Paramètres**
+ `input`: le tableau à réduire.
+ `initialValue`: valeur initiale à utiliser dans l'opération de réduction.
+ `in`: expression à évaluer sur chaque élément du `input` tableau. Cette expression doit renvoyer une valeur qui sera utilisée lors de la prochaine itération de la réduction.

## Exemple (MongoDB Shell)
<a name="reduce-examples"></a>

L'exemple suivant montre comment utiliser l'`$reduce`opérateur pour calculer la somme de tous les éléments d'un tableau.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.orders.aggregate([
  {
    $project: {
      total: {
        $reduce: {
          input: "$items",
          initialValue: 0,
          in: { $add: ["$$value", "$$this"] }
        }
      }
    }
  }
])
```

**Sortie**

```
[
  { "_id": 1, "total": 15 },
  { "_id": 2, "total": 60 },
  { "_id": 3, "total": 80 },
  { "_id": 4, "total": 300 }
]
```

L'`$reduce`opérateur parcourt le `items` tableau en ajoutant chaque élément à `initialValue` 0. Le résultat est la somme de tous les éléments du tableau.

## Exemples de code
<a name="reduce-code"></a>

Pour afficher un exemple de code d'utilisation de la `$reduce` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Voici un exemple d'utilisation de l'`$reduce`opérateur dans une application 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 ]

Voici un exemple d'utilisation de l'`$reduce`opérateur dans une application 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>

Nouveau depuis la version 5.0.

Non pris en charge par le cluster Elastic.

L'`$regexFind`opérateur d'Amazon DocumentDB est utilisé pour effectuer une correspondance d'expressions régulières sur des champs de chaîne dans des documents. Il vous permet de rechercher et d'extraire des sous-chaînes spécifiques correspondant à un modèle d'expression régulière donné.

**Paramètres**
+ `input`: le champ ou l'expression de chaîne à rechercher.
+ `regex`: le modèle d'expression régulière à associer.
+ `options`: (facultatif) Objet qui spécifie des paramètres facultatifs pour l'expression régulière, tels que la distinction majuscules/majuscules et la correspondance multiligne. Les options prises en charge sont `i` (sans distinction majuscules/majuscules) et `m` (multiligne).

## Exemple (MongoDB Shell)
<a name="regexFind-examples"></a>

L'exemple suivant montre comment utiliser l'`$regexFind`opérateur pour rechercher des documents dont le `name` champ correspond à un modèle d'expression régulière spécifique.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.users.aggregate([
  {
    $project: {
      names: {
        $regexFind: { input: '$name', regex: 'j', options: 'i' }
      }
    }
  },
  { $match: {names: {$ne: null}}}
])
```

Cette requête renverra tous les documents dont le `name` champ contient la lettre « j » (sans distinction majuscules/majuscules).

**Sortie**

```
[
  { _id: 1, names: { match: 'J', idx: 0, captures: [] } }
]
```

**Remarque :** si votre requête utilise la version 1 du planificateur Amazon DocumentDB, vous devez utiliser un indice pour utiliser un index. Sans indication, la requête peut effectuer une analyse de la collection. Pour vérifier la version de votre planificateur et en savoir plus sur l'utilisation des astuces, consultez la [documentation Amazon DocumentDB Query Planner] (https://docs.aws.amazon.com/documentdb/latest/developerguide/query-planner.html).

## Exemples de code
<a name="regexFind-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$regexFind` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Introduit dans la version 5.0

L'`$regexFindAll`opérateur d'Amazon DocumentDB est utilisé pour effectuer une correspondance d'expressions régulières sur des champs de chaîne dans des documents. Il vous permet de rechercher et d'extraire des sous-chaînes spécifiques correspondant à un modèle d'expression régulière donné, en renvoyant toutes les correspondances de l'expression régulière.

**Paramètres**
+ `input`: le champ ou l'expression de chaîne à rechercher.
+ `regex`: le modèle d'expression régulière à associer.
+ `options`: (facultatif) Objet qui spécifie des paramètres facultatifs pour l'expression régulière, tels que la distinction majuscules/majuscules et la correspondance multiligne. Les options prises en charge sont `i` (sans distinction majuscules/majuscules) et `m` (multiligne).

## Exemple (MongoDB Shell)
<a name="regexFindAll-examples"></a>

L'exemple suivant montre comment utiliser l'`$regexFindAll`opérateur pour extraire toutes les séquences de lettres du `email` champ.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      emailMatches: {
        $regexFindAll: { input: '$email', regex: '[a-z]+', options: 'i' }
      }
    }
  }
])
```

**Sortie**

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

**Remarque :** si votre requête utilise la version 1 du planificateur Amazon DocumentDB, vous devez utiliser un indice pour utiliser un index. Sans indication, la requête peut effectuer une analyse de la collection. Pour vérifier la version de votre planificateur et en savoir plus sur l'utilisation des astuces, consultez la [documentation Amazon DocumentDB Query Planner] (https://docs.aws.amazon.com/documentdb/latest/developerguide/query-planner.html).

## Exemples de code
<a name="regexFindAll-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$regexFindAll` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Voici un exemple d'utilisation de l'`$regexFind`opérateur dans une application 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 ]

Voici un exemple d'utilisation de l'`$regexFind`opérateur dans une application 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>

Nouveau depuis la version 5.0. Non pris en charge par le cluster Elastic.

L'`$regexMatch`opérateur dans Amazon DocumentDB est utilisé pour effectuer une correspondance d'expressions régulières sur des champs de chaîne. Elle renvoie une valeur booléenne (`true`ou`false`) indiquant si la chaîne d'entrée correspond au modèle spécifié.

**Paramètres**
+ `input`: chaîne à tester par rapport à l'expression régulière.
+ `regex`: le modèle d'expression régulière à associer.
+ `options`: (Facultatif) Indicateurs permettant de modifier le comportement des expressions régulières, tels que la correspondance insensible aux majuscules (`i`) ou la correspondance multiligne (). `m`

## Exemple (MongoDB Shell)
<a name="regexMatch-examples"></a>

L'exemple suivant montre comment utiliser l'`$regexMatch`opérateur pour vérifier si les noms commencent par la lettre « M ». L'opérateur renvoie `true` ou `false` pour chaque document.

**Création d'exemples de documents**

```
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" },

]);
```

**Exemple de requête**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      startsWithM: {
        $regexMatch: {
          input: "$name",
          regex: "^M",
          options: "i"
        }
      }
    }
  }
]);
```

**Sortie**

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

## Exemples de code
<a name="regexMatch-code"></a>

Pour afficher un exemple de code d'utilisation de la `$regexMatch` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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 Remplacer tout
<a name="replaceAll"></a>

Introduit dans la version 5.0

L'`$replaceAll`opérateur dans Amazon DocumentDB est utilisé pour remplacer toutes les occurrences d'un modèle de chaîne spécifié dans un champ par une nouvelle chaîne. Cet opérateur peut être utile pour des tâches telles que la normalisation des données, le nettoyage de texte et la manipulation de chaînes de caractères.

**Paramètres**
+ `input`: champ ou expression contenant la chaîne à remplacer.
+ `find`: le modèle de chaîne à rechercher et à remplacer.
+ `replacement`: chaîne par laquelle remplacer les occurrences correspondantes.

## Exemple (MongoDB Shell)
<a name="replaceAll-examples"></a>

L'exemple suivant montre comment utiliser l'`$replaceAll`opérateur dans un pipeline d'agrégation pour remplacer toutes les occurrences de la chaîne « Chocolatier » par « Chocolate Co ». dans le champ « Nom de marque » d'une collection « produits ».

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.products.aggregate([
  {
    $addFields: {
      "brandName": {
        $replaceAll: {
          input: "$brandName",
          find: "Chocolatier",
          replacement: "Chocolate Co."
        }
      }
    }
  }
])
```

**Sortie**

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

## Exemples de code
<a name="replaceAll-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$replaceAll` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

------

# \$1RemplaceOne
<a name="replaceOne"></a>

Introduit dans la version 5.0

L'`$replaceOne`opérateur dans Amazon DocumentDB est un opérateur d'expression de chaîne utilisé dans les pipelines d'agrégation pour remplacer la première occurrence d'une sous-chaîne spécifiée dans une chaîne par une chaîne de remplacement. Cet opérateur distingue les majuscules et minuscules et ne remplace que la première correspondance trouvée.

**Paramètres**
+ `input`: chaîne (champ) sur laquelle effectuer la recherche.
+ `find`: chaîne à rechercher dans l'entrée.
+ `replacement`: chaîne destinée à remplacer la première occurrence de la recherche dans l'entrée (champ).

## Exemple (MongoDB Shell)
<a name="replaceOne-examples"></a>

L'exemple suivant montre comment utiliser l'`$replaceOne`opérateur dans un pipeline d'agrégation pour remplacer des sous-chaînes dans les noms de produits.

**Création d'exemples de documents**

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

**Exemple d'agrégation**

```
db.products.aggregate([
  {
    $addFields: {
      standardizedName: {
        $replaceOne: {
          input: "$name",
          find: "Pack",
          replacement: "Package"
        }
      }
    }
  }
]);
```

**Sortie**

Le résultat indique que seule la première occurrence de « Pack » dans chaque nom de produit a été remplacée par « 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"
  }
```

## Exemples de code
<a name="replaceOne-code"></a>

Pour afficher un exemple de code d'utilisation de la `$replaceOne` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur est utilisé pour remplacer le document racine par le document intégré spécifié. Cela est utile lorsque vous souhaitez promouvoir un document imbriqué au niveau supérieur ou restructurer votre sortie de données.

**Paramètres**
+ `newRoot`: le nouveau document racine qui remplacera le document racine existant.

## Exemple (MongoDB Shell)
<a name="replaceRoot-examples"></a>

Cet exemple montre comment extraire les informations d'adresse de livraison des commandes des clients, ce qui est utile pour générer des étiquettes d'expédition ou des listes d'adresses.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.orders.aggregate([
  {
    $replaceRoot: {
      newRoot: "$shippingAddress"
    }
  }
])
```

**Sortie**

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

## Exemples de code
<a name="replaceRoot-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$replaceRoot` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

------

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

Nouveau depuis la version 8.0

Non pris en charge par le cluster Elastic.

La phase `$replaceWith` d'agrégation dans Amazon DocumentDB est utilisée pour remplacer le document d'entrée par un nouveau document. Tous les champs existants du document d'entrée, y compris le champ \$1id, sont remplacés par le nouveau document. `$replaceWith`est couramment utilisé pour aplatir des documents ou promouvoir un document intégré au niveau supérieur.

**Paramètres**
+ `<replacement>`(obligatoire) : Le nouveau document qui remplacera le document existant.

## Exemple (MongoDB Shell)
<a name="replaceWith-examples"></a>

L'exemple suivant montre comment utiliser l'`$replaceWith`opérateur pour remplacer un document existant dans une collection Amazon DocumentDB.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.restaurants.aggregate([
  { $replaceWith: {
      name: "$name",
      cuisine: "$cuisine",
      rating: { $avg: "$ratings" }
    }
  }
]);
```

**Sortie**

```
[
  {
    name: 'Biryani Adda',
    cuisine: 'Indian',
    rating: 3.4
  },
  {
    name: 'The Burger Spot',
    cuisine: 'American',
    rating: 2.7777777777777777
  }
]
```

## Exemples de code
<a name="replaceWith-code"></a>

Pour afficher un exemple de code d'utilisation de la `$replaceWith` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour inverser les éléments d'un tableau dans l'ordre spécifié. Cet opérateur est utile lorsque vous devez réorganiser les éléments d'un tableau dans le sens inverse.

**Paramètres**
+ `expression`: expression du tableau à inverser.

## Exemple (MongoDB Shell)
<a name="reverseArray-examples"></a>

L'exemple suivant montre comment utiliser l'`$reverseArray`opérateur pour inverser l'ordre des éléments d'un tableau.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.miles.aggregate([
  {
    $project: {
      _id: 1,
      member_since: 1,
      credit_card: 1,
      reversed_flight_miles: { $reverseArray: "$flight_miles" }
    }
  }
]);
```

**Sortie**

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

Dans cet exemple, l'`$reverseArray`opérateur est utilisé pour inverser l'ordre du `flight_miles` tableau. Le `reversed_flight_miles` champ obtenu dans la sortie affiche les éléments du tableau dans l'ordre inverse.

## Exemples de code
<a name="reverseArray-code"></a>

Pour afficher un exemple de code d'utilisation de la `$reverseArray` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Voici un exemple d'utilisation de l'`$reverseArray`opérateur dans une application 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 ]

Voici un exemple d'utilisation de l'`$reverseArray`opérateur dans une application 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()
```

------

# \$1trim
<a name="rtrim"></a>

Nouveau depuis la version 4.0.

Non pris en charge par le cluster Elastic.

L'`$rtrim`opérateur dans Amazon DocumentDB est utilisé pour supprimer les derniers caractères d'une chaîne. Par défaut, il supprime les espaces blancs de fin, mais vous pouvez également spécifier un ensemble de caractères à supprimer en transmettant l'argument chars.

**Paramètres**
+ `input`: chaîne d'entrée à partir de laquelle les espaces blancs de fin doivent être supprimés.
+ `chars`: (facultatif) Pour supprimer des caractères spécifiques.

## Exemple (MongoDB Shell)
<a name="rtrim-examples"></a>

L'exemple suivant montre comment utiliser l'`$rtrim`opérateur pour supprimer les caractères spécifiés de fin (« \$1 ») d'une chaîne.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="rtrim-code"></a>

Pour afficher un exemple de code d'utilisation de la `$rtrim` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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 phase `$sample` d'agrégation dans Amazon DocumentDB est utilisée pour sélectionner de manière aléatoire un nombre spécifié de documents dans une collection. Cela est utile pour des tâches telles que l'analyse des données, les tests et la génération d'échantillons pour un traitement ultérieur.

**Paramètres**
+ `size`: le nombre de documents à sélectionner de manière aléatoire.

## Exemple (MongoDB Shell)
<a name="sample-examples"></a>

L'exemple suivant montre comment utiliser le `$sample` stage pour sélectionner au hasard deux documents de la `temp` collection.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.temp.aggregate([
   { $sample: { size: 2 } }
])
```

**Sortie**

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

Comme le montrent les résultats, 2 des 10 documents ont été échantillonnés au hasard. Vous pouvez désormais utiliser ces documents pour déterminer une moyenne ou pour effectuer des min/max calculs.

## Exemples de code
<a name="sample-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$sample` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

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

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

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

sampleDocuments();
```

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

```
from pymongo import MongoClient

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

    result = list(collection.aggregate([
        { '$sample': { 'size': 2 } }
    ]))

    print(result)
    client.close()

sample_documents()
```

------

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

Nouveau depuis la version 5.0.

L'`$search`opérateur d'Amazon DocumentDB est utilisé pour fournir des fonctionnalités de recherche de texte.

**Paramètres**

Aucune

## Exemple (MongoDB Shell)
<a name="search-examples"></a>

L'exemple suivant montre comment utiliser l'`$search`opérateur pour effectuer une requête de recherche textuelle.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.textcollection.find(
  { $text: { $search: "John" } }
);
```

**Sortie**

```
[
  {
    _id: 1,
    name: 'John Doe',
    description: 'This is a sample document about John Doe.'
  }
]
```

## Exemples de code
<a name="search-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$search` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur d'Amazon DocumentDB extrait le composant secondes d'une date ou d'un horodatage. Il est utilisé pour récupérer la valeur des secondes à partir d'un champ de date ou d'horodatage.

**Paramètres**
+ `expression`: champ de date ou d'horodatage à partir duquel la valeur des secondes est extraite. Cette expression peut être un chemin de champ ou toute expression valide aboutissant à une date ou à un horodatage.

## Exemple (MongoDB Shell)
<a name="second-examples"></a>

L'exemple suivant montre comment utiliser l'`$second`opérateur pour extraire la composante secondes d'un champ de date.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.users.aggregate([{ $project: { name: 1, dobSeconds: { $second: "$dob" } } }])
```

**Sortie**

```
[
  { "_id" : ObjectId("6089a9c306a829d1f8b456a1"), "name" : "John", "dobSeconds" : 45 },
  { "_id" : ObjectId("6089a9c306a829d1f8b456a2"), "name" : "Jane", "dobSeconds" : 59 },
  { "_id" : ObjectId("6089a9c306a829d1f8b456a3"), "name" : "Bob", "dobSeconds" : 0 }
]
```

## Exemples de code
<a name="second-code"></a>

Pour afficher un exemple de code d'utilisation de la `$second` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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>

Nouveau depuis la version 8.0

Non pris en charge par le cluster Elastic.

La phase `$set` d'agrégation dans Amazon DocumentDB vous permet d'ajouter de nouveaux champs ou de mettre à jour les valeurs de champs existantes dans la documentation au cours d'un pipeline d'agrégation.

**Paramètres**
+ `expression`: expression à évaluer. Il peut s'agir de n'importe quelle expression d'agrégation valide, y compris les références de champs et les opérations arithmétiques.

## Exemple (MongoDB Shell)
<a name="set-stage-examples"></a>

L'exemple suivant illustre l'utilisation de la phase d'`$set`agrégation pour calculer les totaux en multipliant le `quantity` champ par le `price` champ.

**Création d'exemples de documents**

```
db.inventory.insertMany([
  { item: "pencil", quantity: 100, price: 0.24},
  { item: "pen", quantity: 204, price: 1.78 }
]);
```

**Exemple d'agrégation**

```
db.inventory.aggregate([
  {
    $set: {
      total: { $multiply: ["$quantity", "$price"] }
    }
  }
])
```

**Sortie**

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

## Exemples de code
<a name="set-stage-code"></a>

Pour afficher un exemple de code d'utilisation de la `$set` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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>

Nouveau depuis la version 4.0.

L'`$setDifference`opérateur dans Amazon DocumentDB est utilisé pour comparer deux ensembles et renvoyer les éléments qui se trouvent dans le premier ensemble mais pas dans le second ensemble. Cet opérateur est utile pour trouver les éléments uniques entre deux ensembles.

**Paramètres**
+ `firstSet`: premier ensemble à comparer.
+ `secondSet`: Le deuxième ensemble à comparer.

## Exemple (MongoDB Shell)
<a name="setDifference-examples"></a>

L'exemple suivant montre comment utiliser l'`$setDifference`opérateur pour rechercher les éléments uniques entre deux ensembles.

**Création d'exemples de documents**

```
db.collection.insertMany([
  { _id: 1, fruits: ["apple", "banana", "cherry", "date"] },
  { _id: 2, fruits: ["banana", "cherry", "date", "elderberry"] }
]);
```

**Exemple de requête**

```
db.collection.aggregate([
  {
    $project: {
      uniqueFruits: { $setDifference: ["$fruits", ["banana", "cherry", "date"]] }
    }
  }
]);
```

**Sortie**

```
[
  { "_id": 1, "uniqueFruits": ["apple"] },
  { "_id": 2, "uniqueFruits": ["elderberry"] }
]
```

La requête exécute les étapes suivantes :

1. Il utilise la `$project` scène pour créer un nouveau champ `uniqueFruits` pour chaque document.

2. L'`$setDifference`opérateur compare le `fruits` tableau avec le tableau `[&quot;banana&quot;, &quot;cherry&quot;, &quot;date&quot;]` et renvoie les éléments uniques du `fruits` tableau.

## Exemples de code
<a name="setDifference-code"></a>

Pour afficher un exemple de code d'utilisation de la `$setDifference` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Voici un exemple d'utilisation de l'`$setDifference`opérateur dans une application 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 ]

Voici un exemple d'utilisation de l'`$setDifference`opérateur dans une application 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`opérateur dans Amazon DocumentDB est utilisé pour déterminer si deux ensembles sont égaux. Il compare deux tableaux et indique `true` s'ils contiennent les mêmes éléments distincts, quel que soit leur ordre.

**Paramètres**
+ `expression1`: premier tableau à comparer.
+ `expression2`: le deuxième tableau à comparer.

## Exemple (MongoDB Shell)
<a name="setEquals-examples"></a>

L'exemple suivant montre comment utiliser l'`$setEquals`opérateur pour comparer deux ensembles de valeurs.

**Création d'exemples de documents**

```
db.collection.insertMany([
  { _id: 1, fruits: ["apple", "banana", "cherry"] },
  { _id: 2, fruits: ["banana", "apple", "cherry"] },
  { _id: 3, fruits: ["apple", "banana", "orange"] }
])
```

**Exemple de requête**

```
db.collection.find({
  $expr: {
    $setEquals: ["$fruits", ["apple", "banana", "cherry"]]
  }
})
```

**Sortie**

```
{ "_id" : 1, "fruits" : [ "apple", "banana", "cherry" ] }
{ "_id" : 2, "fruits" : [ "banana", "apple", "cherry" ] }
```

La requête utilise l'`$setEquals`opérateur pour comparer le `fruits` champ de chaque document avec le tableau`[&quot;apple&quot;, &quot;banana&quot;, &quot;cherry&quot;]`. Les documents dont le `fruits` champ est égal au tableau de comparaison sont renvoyés.

## Exemples de code
<a name="setEquals-code"></a>

Pour afficher un exemple de code d'utilisation de la `$setEquals` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour renvoyer les éléments communs entre deux ou plusieurs tableaux. Cet opérateur est particulièrement utile lorsque vous travaillez avec des ensembles de données, car il vous permet de trouver l'intersection de plusieurs ensembles.

**Paramètres**
+ `array1`: le premier tableau à se croiser.
+ `array2`: le deuxième tableau à intersecter.
+ `arrayN`: (facultatif) Tableaux supplémentaires à intersecter.

## Exemple (MongoDB Shell)
<a name="setIntersection-examples"></a>

L'exemple suivant montre comment utiliser l'`$setIntersection`opérateur pour trouver les éléments communs entre deux tableaux.

**Création d'exemples de documents**

```
db.collection.insertMany([
  { _id: 1, colors: ["red", "blue", "green"] },
  { _id: 2, colors: ["blue", "yellow", "orange"] },
  { _id: 3, colors: ["red", "green", "purple"] }
])
```

**Exemple de requête**

```
db.collection.aggregate([
  { $project: {
      _id: 1,
      commonColors: { $setIntersection: ["$colors", ["red", "blue", "green"]] }
    }
  }
])
```

**Sortie**

```
[
  { "_id": 1, "commonColors": ["red", "blue", "green"] },
  { "_id": 2, "commonColors": ["blue"] },
  { "_id": 3, "commonColors": ["red", "green"] }
]
```

## Exemples de code
<a name="setIntersection-code"></a>

Pour afficher un exemple de code d'utilisation de la `$setIntersection` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour déterminer si un ensemble de valeurs est un sous-ensemble d'un autre ensemble. Il est utile pour effectuer des comparaisons basées sur des ensembles et des opérations sur des champs de tableau.

**Paramètres**
+ `field`: Le champ auquel appliquer l'`$setIsSubset`opérateur.
+ `set`: L'ensemble avec lequel comparer le champ.

## Exemple (MongoDB Shell)
<a name="setIsSubset-examples"></a>

L'exemple suivant montre comment utiliser l'`$setIsSubset`opérateur pour vérifier si le `tags` champ est un sous-ensemble de l'ensemble spécifié.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.products.find({
  $expr: { $setIsSubset: [["tag1", "tag2"], "$tags"] }
})
```

\$1Remarque :\$1 `$setIsSubset` est un opérateur d'agrégation qui ne peut pas être utilisé directement dans les requêtes find (). Dans cet exemple, `$expr` est utilisé pour combler le fossé entre les opérateurs de requête et les expressions d'agrégation. `find()`

**Sortie**

```
[
  { "_id" : 1, "name" : "Product A", "tags" : [ "tag1", "tag2", "tag3" ] },
  { "_id" : 2, "name" : "Product B", "tags" : [ "tag1", "tag2" ] }
]
```

La requête renvoie les documents dont le `tags` champ est un sous-ensemble de l'ensemble`[&quot;tag1&quot;, &quot;tag2&quot;]`.

## Exemples de code
<a name="setIsSubset-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$setIsSubset` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur d'`$setUnion`agrégation dans Amazon DocumentDB est utilisé pour combiner deux ou plusieurs ensembles de valeurs et renvoyer un ensemble contenant tous les éléments uniques des ensembles d'entrée. Cet opérateur est utile lorsque vous devez effectuer des opérations basées sur des ensembles sur des champs de tableau dans vos documents.

**Paramètres**
+ `expression1`: expression qui se résout en un tableau.
+ `expression2`: expression qui se résout en un tableau.
+ `expressionN`: expressions supplémentaires qui se résolvent en tableaux (facultatif).

## Exemple (MongoDB Shell)
<a name="setUnion-examples"></a>

L'exemple suivant montre comment utiliser l'`$setUnion`opérateur pour combiner les éléments uniques de deux champs de tableau dans une collection.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.users.aggregate([
  {
    $project: {
      name: 1,
      allInterests: { $setUnion: ["$hobbies", "$skills"] }
    }
  }
]);
```

**Sortie**

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

Dans cet exemple, l'`$setUnion`opérateur est utilisé pour combiner les éléments uniques des champs `hobbies` et du `skills` tableau pour chaque document utilisateur. Le `allInterests` champ qui en résulte contient l'union de tous les loisirs et compétences uniques de chaque utilisateur.

## Exemples de code
<a name="setUnion-code"></a>

Pour afficher un exemple de code d'utilisation de la `$setUnion` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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>

Dans Amazon DocumentDB, l'`$skip`opérateur est utilisé pour décaler le point de départ des résultats de la requête, ce qui vous permet de récupérer un sous-ensemble spécifique des documents correspondants. Cela est particulièrement utile dans les scénarios de pagination, dans lesquels vous souhaitez récupérer les pages de résultats suivantes.

**Paramètres**
+ `skip`: le nombre de documents à ignorer avant de renvoyer les documents restants.

## Exemple (MongoDB Shell)
<a name="skip-examples"></a>

L'exemple suivant montre comment utiliser l'`$skip`opérateur pour récupérer la deuxième page de résultats (documents 11 à 20) d'une collection.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.collection.find({}, { "name": 1 })
             .skip(10)
             .limit(10);
```

**Sortie**

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

## Exemples de code
<a name="skip-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$skip` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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'opérateur d'`$slice`agrégation vous permet de renvoyer un sous-ensemble d'un tableau en parcourant le tableau depuis le début ou la fin du tableau. Ceci est utilisé pour afficher un nombre limité d'éléments d'un champ de tableau, tels que les N éléments du haut ou du bas.

**Paramètres**
+ `array`: champ du tableau à découper.
+ `n`: entier qui indique le nombre d'éléments à renvoyer. Une valeur positive commence au début du tableau, tandis qu'une valeur négative commence à la fin du tableau.

## Exemple (MongoDB Shell)
<a name="slice-examples"></a>

L'exemple suivant montre comment utiliser `$slice` pour renvoyer les deux premiers bonbons préférés à chaque chef.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.sweets.aggregate([
  { $project: { _id: 0, name: 1, topTwoFavorites: { $slice: [ "$favorites", 2 ] } } }
]);
```

**Sortie**

```
[
  { name: 'Alvin', topTwoFavorites: [ 'chocolate', 'cake' ] },
  { name: 'Tom', topTwoFavorites: [ 'donuts', 'pudding' ] },
  { name: 'Jessica', topTwoFavorites: [ 'fudge', 'smores' ] },
  { name: 'Rachel', topTwoFavorites: [ 'ice cream' ] }
]
```

Dans cet exemple, l'`$slice`opérateur est utilisé pour extraire les deux premiers éléments du `favorites` tableau pour chaque document.

## Exemples de code
<a name="slice-code"></a>

Pour afficher un exemple de code d'utilisation de la `$slice` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur est utilisé pour renvoyer le nombre d'éléments dans un champ de tableau. Cela peut être utilisé pour déterminer le nombre d'éléments d'un tableau stocké dans un document.

**Paramètres**
+ `field`: le chemin du champ dont vous souhaitez renvoyer la taille du tableau.

## Exemple (MongoDB Shell)
<a name="size-examples"></a>

Cet exemple montre comment utiliser l'`$size`opérateur pour renvoyer le nombre d'équipes suivies par chaque utilisateur.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.profiles.aggregate([
  {
    $project: {
      _id: 0,
      name: 1,
      "numberOfTeams": { $size: "$teams" }
    }
  }
])
```

**Sortie**

```
[
  { name: 'John Doe', numberOfTeams: 3 },
  { name: 'Jane Smith', numberOfTeams: 2 },
  { name: 'Bob Johnson', numberOfTeams: 3 }
]
```

## Exemples de code
<a name="size-code"></a>

Pour afficher un exemple de code d'utilisation de la `$size` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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 phase `$sort` d'agrégation classe les documents dans le pipeline en fonction des valeurs de champ spécifiées. Les documents sont classés par ordre croissant ou décroissant selon les critères de tri fournis.

**Paramètres**
+ `field`: nom du champ selon lequel le tri doit être effectué.
+ `order`: `1` À utiliser pour l'ordre croissant ou `-1` décroissant.

## Exemple (MongoDB Shell)
<a name="sort-examples"></a>

L'exemple suivant montre comment utiliser l'`$sort`étape pour commander des produits par prix dans l'ordre décroissant.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.products.aggregate([
  { $sort: { price: -1 } }
]);
```

**Sortie**

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

## Exemples de code
<a name="sort-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la phase d'`$sort`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur d'`$split`agrégation dans Amazon DocumentDB est utilisé pour diviser une chaîne en un tableau de sous-chaînes, en fonction d'un délimiteur spécifié. Cela peut être utile pour analyser des champs de chaînes complexes et extraire des composants individuels pour un traitement ultérieur.

**Paramètres**
+ `string`: chaîne à diviser.
+ `delimiter`: caractère ou chaîne utilisé pour diviser la chaîne d'entrée.

## Exemple (MongoDB Shell)
<a name="split-examples"></a>

Dans cet exemple, nous avons utilisé `$split` pour séparer les composants d'un champ « Desk » en un tableau, ce qui facilite le traitement des données.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

La sortie de `$split` crée un tableau qui peut être utilisé dans l'application pour afficher les informations destinées aux employés.

## Exemples de code
<a name="split-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$split` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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>

Nouveau depuis la version 4.0.

L'`$sqrt`opérateur dans Amazon DocumentDB est utilisé pour calculer la racine carrée d'un nombre.

**Paramètres**
+ `expression`: L'argument peut être n'importe quelle expression valide à condition qu'elle soit résolue en un nombre non négatif.

## Exemple (MongoDB Shell)
<a name="sqrt-examples"></a>

L'exemple suivant montre comment utiliser l'`$sqrt`opérateur pour calculer la racine carrée d'un nombre.

**Création d'exemples de documents**

```
db.numbers.insertMany([
  { "_id": 1, "number": 16 },
  { "_id": 2, "number": 36 },
  { "_id": 3, "number": 64 }
]);
```

**Exemple de requête**

```
db.numbers.aggregate([
  { $project: {
    "_id": 1,
    "square_root": { $sqrt: "$number" }
  }}
]);
```

**Sortie**

```
[
  { _id: 1, square_root: 4 },
  { _id: 2, square_root: 6 },
  { _id: 3, square_root: 8 }
]
```

## Exemples de code
<a name="sqrt-code"></a>

Pour afficher un exemple de code d'utilisation de la `$sqrt` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function 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`opérateur dans Amazon DocumentDB est utilisé pour déterminer la longueur d'une chaîne en octets. Cela est utile lorsque vous devez comprendre la taille de stockage d'un champ de chaîne, en particulier lorsqu'il s'agit de caractères Unicode qui peuvent utiliser plus d'un octet par caractère.

**Paramètres**
+ `expression`: expression de chaîne dont la longueur est calculée.

## Exemple (MongoDB Shell)
<a name="strLenBytes-examples"></a>

Cet exemple montre comment utiliser l'`$strLenBytes`opérateur pour calculer la longueur des champs de chaîne en octets.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.people.aggregate([
  {
    $project: {
      "Desk": 1,
      "length": { $strLenBytes: "$Desk" }
    }
  }
])
```

**Sortie**

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

Notez que la longueur de la chaîne « Düsseldorf-BVV-021 » est de 19 octets, ce qui est différent du nombre de points de code (18) en raison du caractère Unicode « Ü » occupant 2 octets.

## Exemples de code
<a name="strLenBytes-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$strLenBytes` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour déterminer la longueur d'une expression de chaîne en points de code (caractères Unicode). Cela est utile lorsque vous devez connaître le nombre de caractères d'une chaîne plutôt que le nombre d'octets.

**Paramètres**
+ `expression`: expression de chaîne dont la longueur doit être renvoyée en points de code.

## Exemple (MongoDB Shell)
<a name="strLenCP-examples"></a>

L'exemple suivant illustre l'utilisation de l'`$strLenCP`opérateur pour déterminer la longueur des chaînes contenant des caractères Unicode.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.people.aggregate([
  {
    $project: {
      "Desk": 1,
      "length": { $strLenCP: "$Desk" }
    }
  }
])
```

**Sortie**

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

Notez la différence de mesure de longueur pour la chaîne « Düsseldorf-BVV-021 », qui contient un caractère Unicode (Ü). L'`$strLenCP`opérateur compte correctement le nombre de caractères Unicode, tandis que l'`$strLenBytes`opérateur compte le nombre d'octets.

## Exemples de code
<a name="strLenCP-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$strLenCP` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Voici un exemple d'utilisation de l'`$strLenCP`opérateur dans une application Node.js avec le pilote 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 ]

Voici un exemple d'utilisation de l'`$strLenCP`opérateur dans une application Python avec le PyMongo pilote :

```
from pymongo import MongoClient

def 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`opérateur d'Amazon DocumentDB effectue une comparaison entre deux chaînes sans distinction majuscules/majuscules. Elle renvoie une valeur entière indiquant la comparaison lexicographique des deux chaînes d'entrée, en ignorant les différences majuscules/minuscules.

**Paramètres**
+ `string1`: première chaîne à comparer.
+ `string2`: deuxième chaîne à comparer.

## Exemple (MongoDB Shell)
<a name="strcasecmp-examples"></a>

Cet exemple montre comment utiliser l'`$strcasecmp`opérateur pour comparer les chaînes de localisation des bureaux dans une `people` collection, en ignorant les différences majuscules et minuscules.

**Création d'exemples de documents**

```
db.people.insertMany([
  { "_id": 1, "Desk": "mke233-wi" },
  { "_id": 2, "Desk": "MKE233-WI" },
  { "_id": 3, "Desk": "mke233-wi" }
]);
```

**Exemple de requête**

```
db.people.aggregate([
  {
    $project: {
      item: 1,
      compare: { $strcasecmp: ["$Desk", "mke233-wi"] }
    }
  }
]);
```

**Sortie**

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

Le résultat indique que la comparaison entre le `&quot;Desk&quot;` champ et la chaîne est `&quot;mke233-wi&quot;` renvoyée `0` pour les trois documents, ce qui indique que les chaînes sont égales lorsque les majuscules et minuscules sont ignorées.

## Exemples de code
<a name="strcasecmp-code"></a>

Pour afficher un exemple de code d'utilisation de la `$strcasecmp` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour extraire une sous-chaîne d'une chaîne donnée. Cela est particulièrement utile lorsque vous devez définir des sous-chaînes basées sur une plage de caractères plutôt que sur une plage d'octets. Cela est particulièrement important lorsqu'il s'agit de chaînes Unicode, où le nombre d'octets utilisés pour représenter un caractère peut varier.

**Paramètres**
+ `string`: chaîne d'entrée à partir de laquelle extraire la sous-chaîne.
+ `start`: position de départ (base zéro) de la sous-chaîne à extraire. Il peut s'agir d'une expression entière non négative.
+ `length`: le nombre de caractères de la sous-chaîne extraite. Il peut s'agir d'une expression entière non négative.

## Exemple (MongoDB Shell)
<a name="substr-examples"></a>

Dans cet exemple, nous allons démontrer l'utilisation de `$substr` pour extraire l'abréviation de l'État du bureau d'un employé.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.people.aggregate([
  {
    $project: {
      "state": { $substr: ["$Desk", 12, 3] }
    }
  }
])
```

**Sortie**

```
{ "_id": 1, "state": "NRW" },
{ "_id": 2, "state": "HBB" },
{ "_id": 3, "state": "SHH" },
{ "_id": 4, "state": "BBB" }
```

## Exemples de code
<a name="substr-code"></a>

Pour afficher un exemple de code d'utilisation de la `$substr` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect("mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour extraire une sous-chaîne d'une chaîne en fonction d'une plage d'octets spécifiée. Cet opérateur est utile lorsque vous devez extraire une sous-chaîne d'une chaîne et que le nombre d'octets requis pour représenter chaque caractère de la chaîne est important.

Contrairement à `$substrCP` ce qui fonctionne sur le nombre de points de code Unicode, `$substrBytes` fonctionne sur le nombre d'octets nécessaires pour représenter les caractères de la chaîne. Cela peut être particulièrement utile lorsque vous travaillez avec des chaînes contenant des caractères non ASCII, car la représentation de ces caractères peut nécessiter plus d'un octet.

\$1Remarque :\$1 `$substr` est obsolète depuis la version 3.4. `$substr`est désormais un alias pour`$substrBytes`.

**Paramètres**
+ `string`: chaîne d'entrée à partir de laquelle la sous-chaîne sera extraite.
+ `startByte`: la position initiale de l'octet de base zéro de la sous-chaîne à extraire. Une valeur négative peut être utilisée pour spécifier une position à partir de la fin de la chaîne.
+ `length`: le nombre d'octets de la sous-chaîne à extraire.

## Exemple (MongoDB Shell)
<a name="substrBytes-examples"></a>

Dans cet exemple, nous allons l'utiliser `$substrBytes` pour extraire une sous-chaîne d'une chaîne contenant des caractères non ASCII.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.people.aggregate([
  {
    $project: {
      "state": { $substrBytes: [ "$Desk", 12, 3] }
    }
  }
])
```

**Sortie**

```
{ "_id": 1, "state": "NRW" },
{ "_id": 2, "state": "HBB" },
{ "_id": 3, "state": "SHH" },
{ "_id": 4, "state": "BBB" }
```

Dans cet exemple, nous utilisons `$substrBytes` pour extraire une sous-chaîne de 3 octets à partir du 12e octet du `Desk` champ. Cela nous permet d'extraire l'abréviation d'état à 2 caractères, même si la chaîne peut contenir des caractères non ASCII.

## Exemples de code
<a name="substrBytes-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$substrBytes` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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`opérateur dans Amazon DocumentDB est utilisé pour extraire une sous-chaîne d'une chaîne, la sous-chaîne étant spécifiée sous la forme d'une plage de points de code UTF-8 (CP). Cet opérateur est particulièrement utile lorsque vous travaillez avec des chaînes Unicode, car il vous permet d'extraire des sous-chaînes sans avoir à vous soucier de la représentation des caractères en octets sous-jacents.

Contrairement à l'`$substrBytes`opérateur, qui fonctionne sur les positions des octets, l'`$substrCP`opérateur travaille sur les positions des points de code. Cela facilite l'utilisation de chaînes contenant des caractères non ASCII, car le nombre de points de code peut ne pas correspondre au nombre d'octets ou de caractères.

**Paramètres**
+ `string`: chaîne d'entrée à partir de laquelle extraire la sous-chaîne.
+ `start`: position du point de code de départ (base zéro) à partir duquel extraire la sous-chaîne.
+ `length`: le nombre de points de code à extraire.

## Exemple (MongoDB Shell)
<a name="substrCP-examples"></a>

Dans cet exemple, nous allons utiliser l'`$substrCP`opérateur pour extraire l'abréviation de l'État d'une chaîne contenant l'emplacement du bureau de l'employé.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.people.aggregate([
  {
    $project: {
      "state": { $substrCP: ["$Desk", 25, 2] }
    }
  }
]);
```

**Sortie**

```
{ "_id" : 1, "state" : "MN" }
{ "_id" : 2, "state" : "LA" }
{ "_id" : 3, "state" : "CA" }
```

Dans cet exemple, nous savons que l'abréviation de l'état commence au 25e point de code du `Desk` champ et comporte 2 points de code. En utilisant l'`$substrCP`opérateur, nous pouvons extraire l'abréviation de l'état sans avoir à nous soucier de la représentation en octets sous-jacente de la chaîne.

## Exemples de code
<a name="substrCP-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$substrCP` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Dans les exemples Node.js et Python, nous utilisons l'`$substrCP`opérateur pour extraire l'abréviation d'état du `Desk` champ, comme dans l'exemple MongoDB Shell.

------

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

L'`$subtract`opérateur dans Amazon DocumentDB est utilisé pour soustraire des valeurs. Il peut être utilisé pour soustraire des dates, des nombres ou une combinaison des deux. Cet opérateur est utile pour calculer la différence entre deux dates ou pour soustraire une valeur à un nombre.

**Paramètres**
+ `expression1`: première valeur à soustraire.
+ `expression2`: Deuxième valeur à `<expression1>` soustraire.

## Exemple (MongoDB Shell)
<a name="subtract-examples"></a>

L'exemple suivant montre comment utiliser l'`$subtract`opérateur pour calculer la différence entre deux dates.

**Création d'un exemple de document**

```
db.dates.insert([
  {
  "_id": 1,
  "startDate": ISODate("2023-01-01T00:00:00Z"),
  "endDate": ISODate("2023-01-05T12:00:00Z")
  }
]);
```

**Exemple de requête**

```
db.dates.aggregate([
  {
    $project: {
      _id: 1,
      durationDays: {
        $divide: [
          { $subtract: ["$endDate", "$startDate"] },
          1000 * 60 * 60 * 24  // milliseconds in a day
        ]
      }
    }
  }
]);
```

**Sortie**

```
[ { _id: 1, durationDays: 4.5 } ]
```

Dans cet exemple, l'`$subtract`opérateur est utilisé pour calculer la différence entre `$endDate` et `$startDate` en jours.

## Exemples de code
<a name="subtract-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$subtract` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function 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`opérateur dans Amazon DocumentDB renvoie la somme de l'expression spécifiée pour chaque document d'un groupe. Il s'agit d'un opérateur d'accumulateur de groupe qui est généralement utilisé dans l'étape \$1group d'un pipeline d'agrégation pour effectuer des calculs de sommation.

**Paramètres**
+ `expression`: expression numérique à additionner. Il peut s'agir d'un chemin de champ, d'une expression ou d'une constante.

## Exemple (MongoDB Shell)
<a name="sum-examples"></a>

L'exemple suivant montre comment utiliser l'`$sum`opérateur pour calculer le total des ventes pour chaque produit.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.sales.aggregate([
  { $group: {
      _id: "$product",
      totalSales: { $sum: { $multiply: [ "$price", "$quantity" ] } }
    }}
]);
```

**Sortie**

```
[
  { "_id": "abc", "totalSales": 50 },
  { "_id": "xyz", "totalSales": 120 }
]
```

## Exemples de code
<a name="sum-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$sum` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Nouveau depuis la version 4.0.

Non pris en charge par le cluster Elastic.

L'`$switch`opérateur est un opérateur d'expression conditionnelle dans Amazon DocumentDB qui vous permet d'évaluer une liste d'expressions de cas et de renvoyer la valeur du premier cas qui est vraie, ou une valeur par défaut si aucune expression de cas n'est vraie.

**Paramètres**
+ `branches`: un tableau de documents, dont chacun comporte un champ majuscule contenant l'expression booléenne à évaluer, et un champ ensuite contenant la valeur à renvoyer si l'expression majuscule est vraie.
+ `default`: (facultatif) La valeur à renvoyer si aucune des expressions majuscules n'est vraie.

## Exemple (MongoDB Shell)
<a name="switch-examples"></a>

L'exemple suivant illustre l'utilisation de l'`$switch`opérateur pour déterminer les frais d'expédition d'une commande en fonction du total de la commande.

**Création d'exemples de documents**

```
db.orders.insertMany([
  { _id: 1, total: 50 },
  { _id: 2, total: 150 },
  { _id: 3, total: 250 }
]);
```

**Exemple de requête**

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

**Sortie**

```
[
  {
    "_id": 1,
    "total": 50,
    "shippingCost": 5
  },
  {
    "_id": 2,
    "total": 150,
    "shippingCost": 10
  },
  {
    "_id": 3,
    "total": 250,
    "shippingCost": 15
  }
]
```

## Exemples de code
<a name="switch-code"></a>

Pour afficher un exemple de code d'utilisation de la `$switch` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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 à Bool
<a name="toBool"></a>

L'`$toBool`opérateur dans Amazon DocumentDB convertit une expression en valeur booléenne.

**Paramètres**
+ `expression`: expression à convertir en valeur booléenne.

**Remarque** : Toute chaîne est convertie en`true`.

## Exemple (MongoDB Shell)
<a name="toBool-examples"></a>

L'exemple suivant montre comment utiliser l'`$toBool`opérateur pour normaliser les valeurs d'état des appareils à partir de différents types de données.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.deviceStates.aggregate([
  {
    $project: {
      _id: 1,
      deviceId: 1,
      isActive: { $toBool: "$status" }
    }
  }
]);
```

**Sortie**

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

## Exemples de code
<a name="toBool-code"></a>

Pour afficher un exemple de code d'utilisation de la `$toBool` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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 à ce jour
<a name="toDate"></a>

Nouveau depuis la version 4.0

L'opérateur `$toDate` d'agrégation dans Amazon DocumentDB est utilisé pour convertir une date ou une chaîne de date et d'heure en un type BSON Date. Il s'agit de l'opération inverse de l'`$dateToString`opérateur.

**Paramètres**
+ `dateString`: représentation sous forme de chaîne d'une date ou d'une date et d'une heure à convertir en un type de date BSON.
+ `format`: (facultatif) Chaîne qui spécifie le format du`dateString`. Si ce n'est pas le cas, l'opérateur tentera de les analyser `dateString` dans différents formats de date et d'heure standard.
+ `timezone`: (facultatif) Chaîne représentant le fuseau horaire à utiliser pour la conversion. S'il n'est pas indiqué, le fuseau horaire local est utilisé.

## Exemple (MongoDB Shell)
<a name="toDate-examples"></a>

L'exemple suivant montre comment utiliser l'`$toDate`opérateur pour convertir une chaîne de date en un type BSON Date.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.events.aggregate([
  {
    $project: {
      eventName: 1,
      eventTimeDate: { $toDate: "$eventTime" }
    }
  }
]);
```

**Sortie**

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

## Exemples de code
<a name="toDate-code"></a>

Pour afficher un exemple de code d'utilisation de la `$toDate` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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 en décimal
<a name="toDecimal"></a>

Nouveau depuis la version 4.0

L'`$toDecimal`opérateur dans Amazon DocumentDB est utilisé pour convertir une valeur au type de données Decimal128. Cela est utile lorsque vous devez effectuer une arithmétique décimale précise ou gérer des valeurs décimales importantes qui ne peuvent pas être représentées avec précision à l'aide du type de données Double.

**Paramètres**
+ `expression`: expression à convertir au type de données Decimal128.

## Exemple (MongoDB Shell)
<a name="toDecimal-examples"></a>

Cet exemple montre comment utiliser l'`$toDecimal`opérateur pour convertir une valeur de chaîne en un type de données Decimal128.

**Création d'exemples de documents**

```
db.numbers.insertOne({ _id: 1, value: "3.14" });
db.numbers.insertOne({ _id: 2, value: "2.71" });
```

**Exemple de requête**

```
db.numbers.aggregate([
  { $project: {
    _id: 1,
    decimalValue: { $toDecimal: "$value" }
  }}
])
```

**Sortie**

```
[
  { "_id" : 1, "decimalValue" : Decimal128("3.14") },
  { "_id" : 2, "decimalValue" : Decimal128("2.71") }
]
```

## Exemples de code
<a name="toDecimal-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$toDecimal` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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 à doubler
<a name="toDouble"></a>

Nouveau depuis la version 4.0

L'`$toDouble`opérateur d'Amazon DocumentDB est utilisé pour convertir une valeur en un nombre à virgule flottante de 64 bits à double précision. Cela peut être utile lorsque vous devez effectuer des opérations arithmétiques sur des valeurs qui ne sont pas initialement au format numérique.

**Paramètres**

`&lt;expression&gt;`: expression à convertir en valeur double. Il peut s'agir de n'importe quelle expression valide qui se résout en une valeur numérique, une chaîne ou une valeur booléenne.

## Exemple (MongoDB Shell)
<a name="toDouble-examples"></a>

Cet exemple montre comment utiliser l'`$toDouble`opérateur pour convertir une valeur de chaîne en valeur numérique dans le but d'effectuer un calcul mathématique.

**Création d'exemples de documents**

```
db.numbers.insertMany([
  { _id: 1, value: "10.5" },
  { _id: 2, value: "20.25" },
  { _id: 3, value: "7" }
])
```

**Exemple de requête**

```
db.numbers.aggregate([
  {
    $project: {
      _id: 1,
      value: 1,
      double_value: { $toDouble: "$value" },
      double_plus_five: { $add: [{ $toDouble: "$value" }, 5] }
    }
  }
])
```

**Sortie**

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

## Exemples de code
<a name="toDouble-code"></a>

Pour afficher un exemple de code d'utilisation de la `$toDouble` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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 en INT
<a name="toInt"></a>

Nouveau depuis la version 4.0

L'`$toInt`opérateur dans Amazon DocumentDB est utilisé pour convertir une valeur d'entrée en un type de données entier. Cet opérateur est utile lorsque vous devez vous assurer qu'un champ ou une expression est représenté sous la forme d'un entier, ce qui peut être important pour certaines opérations ou tâches de traitement de données.

**Paramètres**
+ `expression`: expression à convertir en entier.

## Exemple (MongoDB Shell)
<a name="toInt-examples"></a>

L'exemple suivant montre comment utiliser l'`$toInt`opérateur pour convertir une valeur de chaîne en entier.

**Création d'exemples de documents**

```
db.numbers.insertMany([
  { "name": "one", "value": "1" },
  { "name": "hundred", "value": "100" }
]);
```

**Exemple de requête**

```
db.numbers.aggregate([
  { $project: {
    "_id": 0,
    "name": 1,
    "intValue": { $toInt: "$value" }
  }}
]);
```

**Sortie**

```
{ "name": "one", "intValue": 1 }
{ "name": "hundred", "intValue": 100 }
```

## Exemples de code
<a name="toInt-code"></a>

Pour afficher un exemple de code d'utilisation de la `$toInt` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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 trop long
<a name="toLong"></a>

Nouveau depuis la version 4.0

L'`$toLong`opérateur dans Amazon DocumentDB est utilisé pour convertir une valeur en un type de données entier (long) de 64 bits. Cela peut être utile lorsque vous devez effectuer des opérations arithmétiques ou des comparaisons sur des valeurs numériques qui peuvent être stockées sous forme de chaînes ou d'autres types de données.

**Paramètres**
+ `expression`: expression à convertir en un entier de 64 bits.

## Exemple (MongoDB Shell)
<a name="toLong-examples"></a>

Cet exemple montre comment utiliser l'`$toLong`opérateur pour convertir une valeur de chaîne en un entier de 64 bits.

**Création d'exemples de documents**

```
db.numbers.insertMany([
  { _id: 1, value: "42" },
  { _id: 3, value: "9223372036854775807" }
]);
```

**Exemple de requête**

```
db.numbers.aggregate([
  {
    $project: {
      _id: 1,
      longValue: { $toLong: "$value" }
    }
  }
])
```

**Sortie**

```
[
  { "_id" : 1, "longValue" : 42 },
  { "_id" : 3, "longValue" : 9223372036854775807 }
]
```

## Exemples de code
<a name="toLong-code"></a>

Pour afficher un exemple de code d'utilisation de la `$toLong` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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`opérateur dans Amazon DocumentDB est utilisé pour convertir une chaîne en minuscules.

**Paramètres**
+ `expression`: expression de chaîne à convertir en minuscules.

## Exemple (MongoDB Shell)
<a name="toLower-examples"></a>

L'exemple suivant montre comment utiliser l'`$toLower`opérateur pour convertir le `Desk` champ en minuscules.

**Création d'exemples de documents**

```
db.locations.insertMany([
  { "_id": 1, "Desk": "Düsseldorf-BVV-021" },
  { "_id": 2, "Desk": "Munich-HGG-32a" }
]);
```

**Exemple de requête**

```
db.locations.aggregate([
  { $project: { item: { $toLower: "$Desk" } } }
]);
```

**Sortie**

```
{ "_id" : 1, "item" : "düsseldorf-bvv-021" }
{ "_id" : 2, "item" : "munich-hgg-32a" }
```

## Exemples de code
<a name="toLower-code"></a>

Pour afficher un exemple de code d'utilisation de la `$toLower` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Nouveau depuis la version 4.0

L'`$toObjectId`opérateur dans Amazon DocumentDB est utilisé pour convertir une représentation sous forme de chaîne d'un en un type ObjectId de ObjectId données réel. Cela peut être utile lorsque vous travaillez avec des données stockées sous forme de représentations sous forme de chaînes de caractères ObjectIds, car cela vous permet d'effectuer des opérations qui nécessitent le type de ObjectId données.

**Paramètres**
+ `expression`: expression sous forme de chaîne représentant une valeur valide ObjectId.

## Exemple (MongoDB Shell)
<a name="toObjectId-examples"></a>

L'exemple suivant montre comment utiliser l'`$toObjectId`opérateur pour convertir une représentation sous forme de chaîne de caractères ObjectId en type de ObjectId données.

**Création d'exemples de documents**

```
db.employees.insertMany([
  { _id: 1, empId:"64e5f8886218c620cf0e8f8a", name: "Carol Smith", employeeId: "c720a" },
  { _id: 2, empId:"64e5f94e6218c620cf0e8f8c", name: "Bill Taylor", employeeId: "c721a" }
]);
```

**Exemple de requête**

```
db.employees.aggregate([
  { $project: {
    "empIdAsObjectId": {$toObjectId: "$empId"}}
  }
]);
```

**Sortie**

```
[
  { _id: 1, empIdAsObjectId: ObjectId('64e5f8886218c620cf0e8f8a') },
  { _id: 2, empIdAsObjectId: ObjectId('64e5f94e6218c620cf0e8f8c') }
]
```

## Exemples de code
<a name="toObjectId-code"></a>

Pour afficher un exemple de code d'utilisation de la `$toObjectId` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

Nouveau depuis la version 4.0

L'`$toString`opérateur dans Amazon DocumentDB est utilisé pour convertir une valeur de n'importe quel type (à l'exception de null) en une représentation sous forme de chaîne. Cela peut être utile lorsque vous devez effectuer des opérations de chaîne sur des valeurs qui ne sont pas initialement au format de chaîne.

**Paramètres**
+ `expression`: expression à convertir en chaîne.

## Exemple (MongoDB Shell)
<a name="toString-examples"></a>

L'exemple suivant montre comment utiliser l'`$toString`opérateur pour convertir des valeurs numériques en chaînes.

**Création d'exemples de documents**

```
db.numbers.insertMany([
  { "_id": 1, "value": 42 },
  { "_id": 2, "value": 3.14 }
]);
```

**Exemple de requête**

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

**Sortie**

```
{ "_id": 1, "valueAsString": "42" }
{ "_id": 2, "valueAsString": "3.14" }
```

## Exemples de code
<a name="toString-code"></a>

Pour afficher un exemple de code d'utilisation de la `$toString` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour convertir une chaîne en majuscules.

**Paramètres**
+ `expression`: expression de chaîne à convertir en majuscules.

## Exemple (MongoDB Shell)
<a name="toUpper-examples"></a>

L'exemple suivant montre comment utiliser l'`$toUpper`opérateur pour convertir le `Desk` champ en majuscules.

**Création d'exemples de documents**

```
db.locations.insertMany([
  { "_id": 1, "Desk": "düsseldorf-bvv-021" },
  { "_id": 2, "Desk": "munich-hgg-32a" }
]);
```

**Exemple de requête**

```
db.locations.aggregate([
  { $project: { item: { $toUpper: "$Desk" } } }
]);
```

**Sortie**

```
{ "_id" : 1, "item" : "DüSSELDORF-BVV-021" }
{ "_id" : 2, "item" : "MUNICH-HGG-32A" }
```

## Exemples de code
<a name="toUpper-code"></a>

Pour afficher un exemple de code d'utilisation de la `$toUpper` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

Nouveau depuis la version 4.0

L'`$trim`opérateur d'Amazon DocumentDB est utilisé pour supprimer les espaces blancs and/or de fin d'une chaîne.

**Paramètres**
+ `input`: expression de chaîne à découper.
+ `chars`: (facultatif) Spécifie les caractères à découper à partir du début et de la fin de la saisie. La valeur par défaut est un espace.

## Exemple (MongoDB Shell)
<a name="trim-examples"></a>

L'exemple suivant montre comment utiliser l'`$trim`opérateur pour supprimer les espaces de début et de fin d'une chaîne.

**Création d'exemples de documents**

```
db.people.insertMany([
  { "name": "   John Doe   " },
  { "name": "   Bob Johnson   " }
])
```

**Exemple de requête**

```
db.people.aggregate([
  { $project: {
    "name": { $trim: {input: "$name"}}
  }}
])
```

**Sortie**

```
[
  { "name": "John Doe" },
  { "name": "Bob Johnson" }
]
```

## Exemples de code
<a name="trim-code"></a>

Pour afficher un exemple de code d'utilisation de la `$trim` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur `$type` d'agrégation renvoie le type de données BSON d'un champ spécifié. Cela est utile pour identifier le type de données des valeurs de champ lors des opérations d'agrégation.

**Paramètres**
+ `expression`: champ ou expression dont le type doit être renvoyé.

## Exemple (MongoDB Shell)
<a name="type-aggregation-examples"></a>

L'exemple suivant montre comment utiliser l'`$type`opérateur pour identifier le type de données du champ de prix pour chaque produit.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.inventory.aggregate([
  {
    $project: {
      item: 1,
      price: 1,
      priceType: { $type: "$price" }
    }
  }
]);
```

**Sortie**

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

## Exemples de code
<a name="type-aggregation-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur d'`$type`agrégation, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

Nouveau depuis la version 8.0

Non pris en charge par le cluster Elastic.

La phase `$unset` d'agrégation dans Amazon DocumentDB vous permet de supprimer des champs de documents.

**Paramètres**
+ `expression`: nom de champ ou liste de plusieurs noms de champs.

## Exemple (MongoDB Shell)
<a name="unset-stage-examples"></a>

L'exemple suivant illustre l'utilisation de la phase d'`$unset`agrégation pour supprimer le `price` champ.

**Création d'exemples de documents**

```
db.inventory.insertMany([
  { item: "pencil", quantity: 100, price: 0.24},
  { item: "pen", quantity: 204, price: 1.78 }
]);
```

**Exemple d'agrégation**

```
db.inventory.aggregate([
  {
    $unset: "price"
  }
])
```

**Sortie**

```
[
  {
    _id: ObjectId('69248951d66dcae121d2950d'),
    item: 'pencil',
    quantity: 100
  },
  {
    _id: ObjectId('69248951d66dcae121d2950e'),
    item: 'pen',
    quantity: 204
  }
]
```

## Exemples de code
<a name="unset-stage-code"></a>

Pour afficher un exemple de code d'utilisation de la `$unset` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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`opérateur est utilisé pour déconstruire un champ de tableau à partir des documents d'entrée afin de générer un document pour chaque élément. Cela peut être utile lorsque vous souhaitez effectuer des opérations sur les éléments individuels d'un tableau, telles que le filtrage, le tri ou la transformation des données.

**Paramètres**
+ `path`: chemin d'accès au champ du tableau à dérouler.
+ `includeArrayIndex`: (facultatif) Spécifie le nom du nouveau champ contenant l'index de l'élément du tableau.
+ `preserveNullAndEmptyArrays`: (facultatif) Détermine si l'opération conserve le document original lorsque le champ du tableau est nul ou s'il s'agit d'un tableau vide.

## Exemple (MongoDB Shell)
<a name="unwind-examples"></a>

L'exemple suivant montre comment utiliser l'`$unwind`opérateur pour déconstruire un champ de tableau et effectuer d'autres opérations sur les éléments individuels.

**Création d'exemples de documents**

```
db.people.insertMany([
  { _id: 1, name: "jon", hobbies: ["painting", "dancing", "singing"] },
  { _id: 2, name: "jane", hobbies: ["reading", "swimming"] },
  { _id: 3, name: "jack", hobbies: [] }
])
```

**Exemple de requête**

```
db.people.aggregate([
  { $unwind: "$hobbies" }
])
```

**Sortie**

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

## Exemples de code
<a name="unwind-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$unwind` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

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

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

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

example();
```

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

```
from pymongo import MongoClient

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

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

    print(result)
    client.close()

example()
```

------

# \$1VectorSearch
<a name="vectorSearch"></a>

Nouveau depuis la version 8.0

Non pris en charge par le cluster Elastic.

L'`$vectorSearch`opérateur d'Amazon DocumentDB vous permet d'effectuer une recherche vectorielle, une méthode utilisée dans le machine learning pour trouver des points de données similaires en comparant leurs représentations vectorielles à l'aide de mesures de distance ou de similarité. Cette fonctionnalité associe la flexibilité et la richesse des requêtes d'une base de données de documents basée sur JSON à la puissance de la recherche vectorielle, ce qui vous permet de créer des cas d'utilisation de l'apprentissage automatique et de l'IA générative tels que la recherche sémantique, la recommandation de produits, etc.

**Paramètres**
+ `<exact>`(facultatif) : indicateur qui indique s'il faut exécuter la recherche du voisin le plus proche exact (ENN) ou du voisin le plus proche approximatif (ANN). La valeur peut être l'une des suivantes :
+ false - pour lancer une recherche ANN
+ vrai - pour exécuter la recherche ENN

S'il est omis ou défini sur false, `numCandidates` c'est obligatoire.

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

## Exemple (MongoDB Shell)
<a name="vectorSearch-examples"></a>

L'exemple suivant montre comment utiliser l'`$vectorSearch`opérateur pour rechercher des descriptions de produits similaires en fonction de leurs représentations vectorielles.

**Création d'exemples de documents**

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

**Création d'un index de recherche vectorielle**

```
db.runCommand(
    {
        createIndexes: "products",
        indexes: [{
            key: {
                "description_vector": "vector"
            },
            vectorOptions: {
                type: "hnsw",
                dimensions: 3,
                similarity: "cosine",
                m: 16,
                efConstruction: 64
            },
            name: "description_index"
        }]
    }
);
```

**Exemple de requête**

```
db.products.aggregate([
  { $vectorSearch: {
      index: "description_index",
      limit: 2,
      numCandidates: 10,
      path: "description_vector",
      queryVector: [0.1, 0.2, 0.3]
    }
  }
]);
```

**Sortie**

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

## Exemples de code
<a name="vectorSearch-code"></a>

Pour afficher un exemple de code d'utilisation de la `$vectorSearch` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Dans Amazon DocumentDB, l'`$week`opérateur renvoie le numéro de semaine d'une date (0-53) conformément à la norme ISO 8601. Le numéro de semaine est calculé en fonction de l'année et du jour de la semaine, le lundi étant le premier jour de la semaine.

**Paramètres**

Aucune

## Exemple (MongoDB Shell)
<a name="week-examples"></a>

L'exemple suivant montre comment utiliser l'`$week`opérateur pour récupérer le numéro de semaine d'une date donnée.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

```
[
  { "_id": 1, "week": 1 },
  { "_id": 2, "week": 2 },
  { "_id": 3, "week": 53 }
]
```

## Exemples de code
<a name="week-code"></a>

Pour afficher un exemple de code d'utilisation de la `$week` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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`opérateur d'Amazon DocumentDB extrait le composant annuel d'une date ou d'un horodatage.

**Paramètres**
+ `expression`: expression de date ou d'horodatage à partir de laquelle extraire le composant annuel.

## Exemple (MongoDB Shell)
<a name="year-examples"></a>

L'exemple suivant montre comment utiliser l'`$year`opérateur pour extraire le composant annuel d'un champ de date.

**Création d'exemples de documents**

```
db.events.insertMany([
  { "_id": 1, "date": ISODate("2023-04-15T00:00:00Z") },
  { "_id": 3, "date": ISODate("2021-12-31T00:00:00Z") }
]);
```

**Exemple de requête**

```
db.events.aggregate([
  { $project: { year: { $year: "$date" } } }
]);
```

**Sortie**

```
[
  { "_id": 1, "year": 2023 },
  { "_id": 3, "year": 2021 }
]
```

## Exemples de code
<a name="year-code"></a>

Pour afficher un exemple de code d'utilisation de la `$year` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur d'Amazon DocumentDB vous permet de combiner plusieurs tableaux en un seul tableau de tuples (paires clé-valeur). Cela est utile lorsque vous devez créer de nouveaux documents ou objets en combinant des données provenant de différentes sources ou de différents tableaux au sein d'un document.

**Paramètres**
+ `inputs`: un tableau d'expressions qui se résolvent en tableaux. Ces tableaux seront combinés en un seul tableau de tuples.
+ `useLongestLength`: (facultatif) Si`true`, le tableau de sortie aura la longueur du tableau d'entrée le plus long, les tableaux plus courts seront remplis `null` de valeurs. Si`false`, le tableau de sortie aura la longueur du tableau d'entrée le plus court.
+ `defaults`: (facultatif) Un tableau de valeurs par défaut à utiliser pour les tuples si le tableau d'entrée correspondant est plus court que le tableau d'entrée le plus long et l'`useLongestLength`est`true`.

## Exemple (MongoDB Shell)
<a name="zip-examples"></a>

L'exemple suivant montre comment utiliser l'`$zip`opérateur pour combiner deux tableaux en un seul tableau de tuples.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.grades.aggregate([
  {
    $project: {
      "name": 1,
      "scoredClasses": {
        $zip: {
          inputs: ["$scores", "$classes"],
          useLongestLength: true,
          defaults: [null, null]
        }
      }
    }
  }
])
```

**Sortie**

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

## Exemples de code
<a name="zip-code"></a>

Pour afficher un exemple de code d'utilisation de la `$zip` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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()
```

------

# Géospatial
<a name="mongo-apis-geospatial-operators"></a>

Cette section fournit des informations détaillées sur les opérateurs géospatiaux pris en charge par 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`opérateur dans Amazon DocumentDB est utilisé pour spécifier un objet de géométrie GeoJSON dans le cadre d'une requête géospatiale. Cet opérateur est utilisé conjointement avec d'autres opérateurs de requêtes géospatiales tels que `$geoWithin` et `$geoIntersects` pour effectuer des requêtes spatiales sur vos données.

Dans Amazon DocumentDB, l'`$geometry`opérateur prend en charge les types de géométrie GeoJSON suivants :
+ Point
+ LineString
+ Polygone
+ MultiPoint
+ MultiLineString
+ MultiPolygon
+ GeometryCollection

**Paramètres**
+ `type`: le type de l'objet de géométrie GeoJSON, par exemple, `Point``Polygon`, etc.
+ `coordinates`: tableau de coordonnées représentant la géométrie. La structure du tableau de coordonnées dépend du type de géométrie.

## Exemple (MongoDB Shell)
<a name="geometry-examples"></a>

L'exemple suivant montre comment utiliser l'`$geometry`opérateur pour exécuter une `$geoIntersects` requête dans Amazon DocumentDB.

**Création d'exemples de documents**

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

**Exemple de requête**

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

**Sortie**

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

## Exemples de code
<a name="geometry-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$geometry` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour rechercher des documents dont les données géospatiales croisent un objet GeoJSON spécifié. Cet opérateur est utile pour les applications qui nécessitent d'identifier des documents en fonction de leur relation spatiale avec une forme géographique donnée, telle qu'un polygone ou un multipolygone.

**Paramètres**
+ `$geometry`: objet GeoJSON qui représente la forme dont il faut vérifier l'intersection. Les types d'objets GeoJSON pris en charge sont`Point`, `LineString``Polygon`, et. `MultiPolygon`

## Exemple (MongoDB Shell)
<a name="geoIntersects-examples"></a>

L'exemple suivant montre comment utiliser l'`$geoIntersects`opérateur pour trouver le nom de l'état pour un ensemble de coordonnées donné dans Amazon DocumentDB.

**Création d'exemples de documents**

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

**Exemple de requête**

```
var location = [-73.965355, 40.782865];

db.states.find({
  "loc": {
    "$geoIntersects": {
      "$geometry": {
        "type": "Point",
        "coordinates": location
      }
    }
  }
}, {
  "name": 1
});
```

**Sortie**

```
{ "_id" : ObjectId("536b0a143004b15885c91a2c"), "name" : "New York" }
```

## Exemples de code
<a name="geoIntersects-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$geoIntersects` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur d'Amazon DocumentDB est utilisé pour rechercher les documents dont les données de localisation (représentées sous forme d'objets GeoJSON) sont entièrement contenues dans une forme spécifiée, telle qu'un polygone ou un multipolygone. Cela est utile pour rechercher des objets situés dans une région géographique spécifique.

**Paramètres**
+ `$geometry`: objet GeoJSON qui représente la forme sur laquelle effectuer une requête.

## Exemple (MongoDB Shell)
<a name="geoWithin-examples"></a>

L'exemple suivant montre comment utiliser l'`$geoWithin`opérateur pour rechercher tous les aéroports situés dans l'État de New York.

**Création d'exemples de documents**

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

**Exemple de requête**

```
var state = db.states.findOne({"name": "New York"});

db.airports.find({
    "loc": {
        "$geoWithin": {
            "$geometry": state.loc
        }
    }
}, {
    "name": 1,
    "type": 1,
    "code": 1,
    "_id": 0
});
```

**Sortie**

```
[
  {
    "name": "John F. Kennedy International Airport",
    "type": "airport",
    "code": "JFK"
  },
  {
    "name": "LaGuardia Airport",
    "type": "airport",
    "code": "LGA"
  }
]
```

## Exemples de code
<a name="geoWithin-code"></a>

Pour afficher un exemple de code d'utilisation de la `$geoWithin` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur d'Amazon DocumentDB est utilisé pour spécifier la distance maximale (en mètres) à partir d'un point GeoJSON à laquelle les documents doivent se trouver pour être inclus dans les résultats de la requête. Cet opérateur est utilisé conjointement avec l'`$nearSphere`opérateur pour effectuer des requêtes géospatiales.

**Paramètres**
+ `$maxDistance`: distance maximale (en mètres) par rapport au point de référence à laquelle les documents doivent se trouver pour être inclus dans les résultats de la requête.

## Exemple (MongoDB Shell)
<a name="maxDistance-examples"></a>

L'exemple suivant montre comment utiliser l'`$maxDistance`opérateur dans Amazon DocumentDB pour rechercher toutes les capitales des États dans un rayon de 100 kilomètres de Boston.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.capitals.find(
  {
    location: {
      $nearSphere: {
        $geometry: { type: "Point", coordinates: [-71.0589, 42.3601] },
        $maxDistance: 100000
      }
    }
  },
  { state: 1, city: 1, _id: 0 }
);
```

**Sortie**

```
[
  { "state": "Rhode Island", "city": "Providence" },
  { "state": "New Hampshire", "city": "Concord" }
]
```

## Exemples de code
<a name="maxDistance-code"></a>

Pour afficher un exemple de code d'utilisation de la `$maxDistance` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`est un opérateur de recherche utilisé conjointement avec `$nearSphere` ou `$geoNear` pour filtrer des documents situés au moins à la distance minimale spécifiée par rapport au point central. Cet opérateur est pris en charge dans Amazon DocumentDB et fonctionne de la même manière que son homologue dans MongoDB.

**Paramètres**
+ `$minDistance`: distance minimale (en mètres) par rapport au point central pour inclure les documents dans les résultats.

## Exemple (MongoDB Shell)
<a name="minDistance-examples"></a>

Dans cet exemple, nous trouverons tous les restaurants situés dans un rayon de 2 kilomètres d'un lieu spécifique à Seattle, dans l'État de Washington.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.usarestaurants.find({
  "location": {
    "$nearSphere": {
      "$geometry": {
        "type": "Point",
        "coordinates": [-122.3516, 47.6156]
      },
      "$minDistance": 1,
      "$maxDistance": 2000
    }
  }
}, {
  "name": 1
});
```

**Sortie**

```
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "name" : "Noodle House" }
{ "_id" : ObjectId("611f3da985009a81ad38e74c"), "name" : "Pike Place Grill" }
```

## Exemples de code
<a name="minDistance-code"></a>

Pour afficher un exemple de code d'utilisation de la `$minDistance` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur d'Amazon DocumentDB est utilisé pour rechercher des documents situés géographiquement à proximité d'un point spécifique. Il renvoie les documents classés par distance, en commençant par les documents les plus proches. Cet opérateur nécessite un index géospatial à deux sphères et est utile pour les requêtes de proximité sur les données de localisation.

**Paramètres**
+ `$geometry`: objet Point GeoJSON qui définit le point central de la requête de proximité.
+ `$maxDistance`: (facultatif) Distance maximale en mètres à partir du point spécifié qu'un document peut atteindre pour correspondre à la requête.
+ `$minDistance`: (facultatif) Distance minimale en mètres à partir du point spécifié qu'un document peut atteindre pour correspondre à la requête.

**Exigences relatives à l'indice**
+ `2dsphere index`: obligatoire pour les requêtes géospatiales sur les données de points GeoJSON.

## Exemple (MongoDB Shell)
<a name="near-examples"></a>

L'exemple suivant montre comment utiliser l'`$near`opérateur pour trouver les restaurants les plus proches d'un lieu spécifique à Seattle, dans l'État de Washington.

**Création d'exemples de documents**

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

**Créer un index 2dsphere**

```
db.usarestaurants.createIndex({ "location": "2dsphere" });
```

**Exemple de requête avec GeoJSON Point**

```
db.usarestaurants.find({
  location: {
    $near: {
      $geometry: {
        type: "Point",
        coordinates: [-122.3516, 47.6156]
      },
      $maxDistance: 100,
      $minDistance: 10
    }
  }
});
```

**Sortie**

```
{
  "_id" : ObjectId("69031ec9ea1c2922a1ce5f4a"),
  "name" : "Noodle House",
  "city" : "Seattle",
  "state" : "Washington",
  "rating" : 4.8,
  "location" : {
    "type" : "Point",
    "coordinates" : [ -122.3517, 47.6159 ]
  }
}
```

## Exemples de code
<a name="near-code"></a>

Pour afficher un exemple de code d'utilisation de la `$near` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur d'Amazon DocumentDB est utilisé pour rechercher des documents situés à une distance spécifiée d'un point géospatial. Cet opérateur est particulièrement utile pour les requêtes géospatiales, telles que la recherche de tous les restaurants situés dans un certain rayon d'un lieu donné.

**Paramètres**
+ `$geometry`: objet GeoJSON qui représente le point de référence. Il doit s'agir d'un `Point` objet comportant `type` des `coordinates` champs et.
+ `$minDistance`: (facultatif) La distance minimale (en mètres) par rapport au point de référence que doivent se trouver les documents.
+ `$maxDistance`: (facultatif) Distance maximale (en mètres) par rapport au point de référence que doivent se trouver les documents.

## Exemple (MongoDB Shell)
<a name="nearSphere-examples"></a>

Dans cet exemple, nous trouverons tous les restaurants dans un rayon de 2 kilomètres (2000 mètres) d'un emplacement spécifique à Seattle, dans l'État de Washington.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.usarestaurants.find({
  location: {
    $nearSphere: {
      $geometry: {
        type: "Point",
        coordinates: [-122.3516, 47.6156]
      },
      $minDistance: 1,
      $maxDistance: 2000
    }
  }
}, {
  name: 1
});
```

**Sortie**

```
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "name" : "Noodle House" }
{ "_id" : ObjectId("611f3da985009a81ad38e74c"), "name" : "Pike Place Grill" }
```

## Exemples de code
<a name="nearSphere-code"></a>

Pour afficher un exemple de code d'utilisation de la `$nearSphere` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

------

# Opérateurs de requête et de projection
<a name="mongo-apis-query-projection-operators"></a>

Cette section fournit des informations détaillées sur les opérateurs de requête et de projection pris en charge par 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'opérateur de `$` projection limite le contenu d'un champ de tableau pour renvoyer uniquement le premier élément correspondant à la condition de requête. Il est utilisé pour projeter un seul élément de tableau correspondant.

**Paramètres**
+ `field.$`: Le champ du tableau avec l'opérateur de position pour projeter le premier élément correspondant.

## Exemple (MongoDB Shell)
<a name="dollar-projection-examples"></a>

L'exemple suivant montre comment utiliser l'opérateur de `$` projection pour renvoyer uniquement l'élément de tableau correspondant.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.students.find(
  { grades: { $gte: 90 } },
  { name: 1, "grades.$": 1 }
);
```

**Sortie**

```
{ "_id" : 1, "name" : "Alice", "grades" : [ 92 ] }
{ "_id" : 2, "name" : "Bob", "grades" : [ 92 ] }
{ "_id" : 3, "name" : "Charlie", "grades" : [ 95 ] }
```

Dans cet exemple, seule la première note supérieure ou égale à 90 est renvoyée pour chaque étudiant.

## Exemples de code
<a name="dollar-projection-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur de `$` projection, sélectionnez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour faire correspondre les documents dont la valeur d'un champ est un tableau et contient tous les éléments spécifiés, quel que soit l'ordre des éléments dans le tableau.

**Paramètres**
+ `field`: nom du champ à vérifier.
+ `[value1, value2, ...]`: liste des valeurs à mettre en correspondance dans le tableau.

 

**Utilisation `$elemMatch` au sein d'une `$all` expression**

Consultez [Utilisation `$elemMatch` au sein d'une `$all` expression](functional-differences.md#functional-differences.elemMatch) les limites relatives à l'utilisation de l'`$elemMatch`opérateur dans une `$all` expression.

 

**Dollar (\$1) dans les noms de champs**

Consultez [Dollar (\$1) et point (.) dans les noms de champs](functional-differences.md#functional-differences-dollardot) les limites relatives à l'interrogation de champs `$` préfixés `$all` dans des objets imbriqués.

## Exemple (MongoDB Shell)
<a name="all-examples"></a>

L'exemple suivant montre comment utiliser l'`$all`opérateur pour récupérer des documents dans lesquels le champ « Couleurs » est un tableau contenant à la fois le « rouge » et le « bleu ».

**Création d'exemples de documents**

```
db.example.insertMany([
  { "Item": "Pen", "Colors": ["Red", "Blue", "Green"] },
  { "Item": "Notebook", "Colors": ["Blue", "White"] },
  { "Item": "Poster Paint", "Colors": ["Red", "Yellow", "White"] }
])
```

**Exemple de requête**

```
db.example.find({ "Colors": { $all: ["Red", "Blue"] } }).pretty()
```

**Sortie**

```
{
  "_id" : ObjectId("6137d6c5b3a1d35e0b6ee6ad"),
  "Item" : "Pen",
  "Colors" : [ 
          "Red", 
          "Blue", 
          "Green" 
  ]
}
```

## Exemples de code
<a name="all-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$all` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour combiner plusieurs expressions et les évaluer en tant que condition unique. Elle revient `true` si toutes les expressions fournies sont évaluées à`true`, et `false` sinon. Cet opérateur est utile pour appliquer plusieurs critères à une requête.

**Paramètres**
+ `expression1`: expression obligatoire qui correspond à une valeur booléenne.
+ `expression2`: expression obligatoire qui correspond à une valeur booléenne.
+ `...`: expressions obligatoires supplémentaires dont l'évaluation est basée sur des valeurs booléennes.

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

L'exemple suivant montre comment utiliser l'`$and`opérateur pour rechercher tous les documents de la collection « utilisateurs » dont le champ « âge » est supérieur à 18 ans et le champ « statut » est « actif ».

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.users.find({
  $and: [
    { age: { $gt: 18 } },
    { status: "active" }
  ]
});
```

**Sortie**

```
[
  { "_id" : ObjectId("614e3c4b63f5892e7c4e2345"), "name" : "John", "age" : 25, "status" : "active" },
  { "_id" : ObjectId("614e3c4b63f5892e7c4e2347"), "name" : "Alice", "age" : 22, "status" : "active" }
]
```

## Exemples de code
<a name="and-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$and` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour faire correspondre les documents dans lesquels tous les bits spécifiés dans un champ sont effacés (définis sur 0). Cet opérateur peut être utile pour effectuer des opérations au niveau du bit sur des données stockées.

**Paramètres**
+ `field`: champ permettant de vérifier si les bits spécifiés sont effacés.
+ `value`: masque de bits numérique qui indique quels bits doivent être vérifiés, ou une liste de positions de bits à vérifier. Un masque numérique peut être binaire (0b...), décimal, hexadécimal (0x...), octal (0o...) ou binaire (). BinData Dans une liste de positions de bits, la position du bit le moins significatif est 0.

## Exemple (MongoDB Shell)
<a name="bitsAllClear-examples"></a>

L'exemple suivant illustre l'utilisation de l'`$bitsAllClear`opérateur dans Amazon DocumentDB.

**Création d'exemples de documents**

```
db.collection.insertMany([
  { _id: 1, bits: 0b1010 },
  { _id: 2, bits: 0b1100 },
  { _id: 3, bits: 0b0101 }
]);
```

**Exemple de requête**

```
db.collection.find({
  bits: { $bitsAllClear: 0b0011 }
})
```

**Sortie**

```
{ "_id" : 2, "bits" : 12 }
```

La requête vérifie si tous les bits spécifiés par le masque de bits `0b0011` (les deux bits les moins significatifs) sont effacés dans le `bits` champ. Le document comportant `_id` 2 satisfait à cette condition, car ces bits sont effacés `bits` dans son champ.

## Exemples de code
<a name="bitsAllClear-code"></a>

Pour afficher un exemple de code d'utilisation de la `$bitsAllClear` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur d'Amazon DocumentDB est utilisé pour rechercher des documents pour lesquels un ensemble spécifique de bits est défini sur 1 dans un champ. Cet opérateur vous permet d'effectuer des opérations bit par bit sur des valeurs de champ et peut être utile lorsque vous devez vérifier l'état de bits individuels au sein d'une valeur numérique.

**Paramètres**
+ `field`: nom du champ numérique sur lequel effectuer l'opération bit par bit.
+ `value`: masque de bits numérique qui indique quels bits doivent être vérifiés, ou une liste de positions de bits à vérifier. Un masque numérique peut être binaire (0b...), décimal, hexadécimal (0x...), octal (0o...) ou binaire (). BinData Dans une liste de positions de bits, la position du bit le moins significatif est 0.

## Exemple (MongoDB Shell)
<a name="bitsAllSet-examples"></a>

L'exemple suivant montre comment utiliser l'`$bitsAllSet`opérateur pour rechercher des documents dans lesquels le `flags` champ contient tous les bits définis par le masque de bits.

**Création d'exemples de documents**

```
db.collection.insert([
  { _id: 1, flags: 0b1010 },
  { _id: 2, flags: 0b1100 },
  { _id: 3, flags: 0b1110 }
])
```

**Exemple de requête**

```
db.collection.find({ flags: { $bitsAllSet: 0b1100 } })
```

**Sortie**

```
{ "_id": 2, "flags": 12 },
{ "_id": 3, "flags": 14 }
```

Dans cet exemple, la requête vérifie les documents pour lesquels le `flags` champ contient tous les bits définis par le masque de bits `0b1100` (qui représente la valeur décimale 12). Les documents contenant `_id` 2 et 3 répondent à ce critère, car les valeurs de leurs `flags` champs comportent tous les bits requis définis (les 3e et 4e bits les moins significatifs).

## Exemples de code
<a name="bitsAllSet-code"></a>

Pour afficher un exemple de code d'utilisation de la `$bitsAllSet` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour faire correspondre les documents dans lesquels l'un des bits spécifiés dans un champ est effacé (défini sur 0). Cela peut être utile pour effectuer des opérations au niveau du bit sur des valeurs de champ stockées dans des documents.

**Paramètres**
+ `field`: Le champ à vérifier.
+ `value`: masque de bits numérique qui indique quels bits doivent être vérifiés, ou une liste de positions de bits à vérifier. Un masque de bits numérique peut être binaire (0b...), décimal, hexadécimal (0x...), octal (0o...) ou binaire (). BinData Dans une liste de positions de bits, la position du bit le moins significatif est 0.

## Exemple (MongoDB Shell)
<a name="bitsAnyClear-examples"></a>

L'exemple suivant montre comment utiliser l'`$bitsAnyClear`opérateur pour vérifier si un bit est libre dans le `status` champ de la `items` collection.

**Création d'exemples de documents**

```
db.items.insertMany([
  { "_id": 1, "status": 7 },
  { "_id": 2, "status": 15 },
  { "_id": 3, "status": 31 }
]);
```

**Exemple de requête**

```
db.items.find({ "status": { $bitsAnyClear: 8 } })
```

**Sortie**

```
{ "_id" : 1, "status" : 7 }
```

Dans cet exemple, la requête recherche les documents dont le `status` champ contient des bits vides (0) dans le masque de bits `8` (binaire`1000`). Le document dont `status` les valeurs sont `7` (binaire`111`) correspond à la requête, car le masque de bits fourni contient au moins un bit clair. Le bit clair correspondant est le quatrième bit le moins significatif.

## Exemples de code
<a name="bitsAnyClear-code"></a>

Pour afficher un exemple de code d'utilisation de la `$bitsAnyClear` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur d'Amazon DocumentDB est utilisé pour interroger des documents dont au moins un bit est défini sur 1 dans les bits spécifiés dans un champ. Cet opérateur vous permet d'effectuer des opérations bit par bit sur les valeurs stockées dans les champs, ce qui permet d'interroger et d'analyser efficacement les données présentant des caractéristiques au niveau du bit.

**Paramètres**
+ `field`: nom du champ auquel appliquer l'opération bit par bit.
+ `value`: masque de bits numérique qui indique quels bits doivent être vérifiés, ou une liste de positions de bits à vérifier. Un masque de bits numérique peut être binaire (0b...), décimal, hexadécimal (0x...), octal (0o...) ou binaire (). BinData Dans une liste de positions de bits, la position du bit le moins significatif est 0.

## Exemple (MongoDB Shell)
<a name="bitsAnySet-examples"></a>

L'exemple suivant montre comment utiliser l'`$bitsAnySet`opérateur pour rechercher des documents dans lesquels au moins un bit est défini dans le `flags` champ.

**Création d'exemples de documents**

```
db.collection.insertMany([
  { _id: 1, flags: 0b1010 },
  { _id: 2, flags: 0b1100 },
  { _id: 3, flags: 0b0011 },
  { _id: 4, flags: 0b0100 }
]);
```

**Exemple de requête**

```
db.collection.find({
  flags: { $bitsAnySet: 0b1010 }
})
```

**Sortie**

```
{ "_id" : 1, "flags" : 10 }
{ "_id" : 2, "flags" : 12 }
{ "_id" : 3, "flags" : 3 }
```

La requête renvoie les documents dans lesquels au moins un des bits spécifiés dans le masque de bits `0b1010` est défini dans le `flags` champ.

## Exemples de code
<a name="bitsAnySet-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$bitsAnySet` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour joindre un commentaire à une requête. Cela peut être utile pour fournir un contexte ou des informations supplémentaires sur la requête, ce qui peut être utile à des fins de débogage ou de documentation. Le commentaire joint apparaîtra dans le résultat d'opérations telles que DB.CurrentOp ().

**Paramètres**
+ `string`: le commentaire joint à la requête.

## Exemple (MongoDB Shell)
<a name="comment-examples"></a>

L'exemple suivant montre comment utiliser l'`$comment`opérateur dans Amazon DocumentDB.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.users.find({ age: { $gt: 25 } }, { _id: 0, name: 1, age: 1 }).comment("Retrieve users older than 25");
```

**Sortie**

```
{ "name" : "John Doe", "age" : 30 }
{ "name" : "Bob Johnson", "age" : 35 }
```

## Exemples de code
<a name="comment-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$comment` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour interroger un champ de tableau et renvoyer des documents dans lesquels au moins un élément du tableau correspond aux critères spécifiés. Cet opérateur est particulièrement utile lorsque vous avez des structures de données complexes avec des tableaux imbriqués ou des documents incorporés.

La version 2.0 du planificateur a ajouté le support des index pour`$elemMatch`.

**Paramètres**
+ `field`: le champ du tableau à interroger.
+ `query`: les critères à comparer aux éléments du tableau.

 

**Utilisation `$elemMatch` au sein d'une `$all` expression**

Consultez [Utilisation `$elemMatch` au sein d'une `$all` expression](functional-differences.md#functional-differences.elemMatch) les limites relatives à l'utilisation de l'`$elemMatch`opérateur dans une `$all` expression.

## Exemple (MongoDB Shell)
<a name="elemMatch-examples"></a>

L'exemple suivant montre comment utiliser l'`$elemMatch`opérateur pour rechercher des documents dans lesquels le `parts` tableau contient au moins un élément répondant aux critères spécifiés.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.col.find({
  parts: { "$elemMatch": { part: "xyz", qty: { $lt: 11 } } }
})
```

**Sortie**

```
{ "_id" : 1, "parts" : [ { "part" : "xyz", "qty" : 10 }, { "part" : "abc", "qty" : 20 } ] }
{ "_id" : 2, "parts" : [ { "part" : "xyz", "qty" : 5 }, { "part" : "abc", "qty" : 10 } ] }
```

## Exemples de code
<a name="elemMatch-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$elemMatch` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('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`opérateur dans Amazon DocumentDB est utilisé pour faire correspondre les documents dont la valeur d'un champ est égale à la valeur spécifiée. Cet opérateur est couramment utilisé dans la `find()` méthode pour récupérer des documents répondant aux critères spécifiés.

**Paramètres**
+ `field`: champ permettant de vérifier la condition d'égalité.
+ `value`: valeur à comparer avec le champ.

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

L'exemple suivant montre comment utiliser l'`$eq`opérateur pour rechercher tous les documents dont le `name` champ est égal à`"Thai Curry Palace"`.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.restaurants.find({ name: { $eq: "Thai Curry Palace" } });
```

**Sortie**

```
{ "_id" : ObjectId("68ee586f916df9d39f3d9414"), "name" : "Thai Curry Palace", "cuisine" : "Thai", "features" : [ "Private Dining" ] }
```

## Exemples de code
<a name="eq-code"></a>

Pour afficher un exemple de code d'utilisation de la `$eq` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur permet de vérifier si un champ existe ou non dans un document. `$exists`particulièrement utile lorsque vous travaillez avec des index épars dans Amazon DocumentDB, où le champ indexé peut ne pas être présent dans tous les documents.

Pour utiliser un index fragmenté que vous avez créée dans une requête, vous devez utiliser la clause `$exists` sur les champs qui couvrent l'index. Si vous omettez`$exists`, Amazon DocumentDB n'utilisera pas l'index clairsemé pour la requête.

**Paramètres**
+ `field`: nom du champ dont l'existence doit être vérifiée.
+ `value`: valeur booléenne (`true`ou`false`) qui indique si le champ doit exister (`true`) ou ne pas exister (`false`) dans les documents correspondants.

## Exemple (MongoDB Shell)
<a name="exists-examples"></a>

L'exemple suivant illustre l'utilisation de l'`$exists`opérateur avec un index clairsemé sur le `special_diets` champ de la `food` collection.

**Création d'exemples de documents**

```
db.food.insertMany([
  { _id: 1, name: "Apple", special_diets: ["vegetarian", "gluten-free"] },
  { _id: 2, name: "Broccoli" },
  { _id: 3, name: "Chicken", special_diets: ["dairy-free"] }
]);
```

**Créez un index clairsemé dans le champ `special\$1diets`**

```
db.food.createIndex({ "special_diets": 1 }, { sparse: true, name: "special_diets_sparse_asc" });
```

**Exemple de requête**

```
db.food.find({ "special_diets": { $exists: true } });
```

**Sortie**

```
[
  { "_id" : 1, "name" : "Apple", "special_diets" : [ "vegetarian", "gluten-free" ] },
  { "_id" : 3, "name" : "Chicken", "special_diets" : [ "dairy-free" ] }
]
```

## Exemples de code
<a name="exists-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$exists` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Nouveau depuis la version 4.0.

Non pris en charge par le cluster Elastic.

L'`$expr`opérateur d'Amazon DocumentDB vous permet d'utiliser des expressions d'agrégation dans le langage de requête. Il vous permet d'effectuer des comparaisons et des calculs complexes sur les champs d'un document, de la même manière que vous utiliseriez les étapes du pipeline d'agrégation.

**Paramètres**
+ `expression`: expression qui renvoie une valeur booléenne, vous permettant d'effectuer des comparaisons et des calculs sur les champs du document.

## Exemple (MongoDB Shell)
<a name="expr-examples"></a>

L'exemple suivant montre comment utiliser l'`$expr`opérateur pour rechercher tous les documents dont le `manufacturingCost` champ est supérieur au `price` champ.

**Création d'exemples de documents**

```
db.inventory.insertMany([
  { item: "abc", manufacturingCost: 500, price: 100 },
  { item: "def", manufacturingCost: 300, price: 450 },
  { item: "ghi", manufacturingCost: 400, price: 120 }
]);
```

**Exemple de requête**

```
db.inventory.find({
  $expr: {
    $gt: ["$manufacturingCost", "$price"]
  }
})
```

**Sortie**

```
{ "_id" : ObjectId("60b9d4d68d2cac581bc5a89a"), "item" : "abc", "manufacturingCost" : 500, "price" : 100 },
{ "_id" : ObjectId("60b9d4d68d2cac581bc5a89c"), "item" : "ghi", "manufacturingCost" : 400, "price" : 120 }
```

## Exemples de code
<a name="expr-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$expr` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour sélectionner les documents dont la valeur du champ spécifié est supérieure à la valeur spécifiée. Cet opérateur est utile pour filtrer et interroger des données sur la base de comparaisons numériques.

**Paramètres**
+ `field`: Le champ à comparer.
+ `value`: valeur à comparer.

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

L'exemple suivant montre comment utiliser l'`$gt`opérateur pour rechercher tous les documents dont le `age` champ est supérieur à 30.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.users.find({ age: { $gt: 30 } });
```

**Sortie**

```
{ "_id" : ObjectId("6249e5c22a5d39884a0a0001"), "name" : "Jane", "age" : 32 },
{ "_id" : ObjectId("6249e5c22a5d39884a0a0002"), "name" : "Bob", "age" : 45 }
```

## Exemples de code
<a name="gt-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$gt` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour faire correspondre des valeurs supérieures ou égales à une valeur spécifiée. Cet opérateur est utile pour filtrer et interroger des données sur la base de comparaisons numériques.

**Paramètres**
+ `field`: champ à vérifier par rapport à la valeur fournie.
+ `value`: valeur à comparer avec le champ.

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

L'exemple suivant illustre l'utilisation de l'`$gte`opérateur dans Amazon DocumentDB pour rechercher tous les documents dont le champ « age » est supérieur ou égal à 25.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.users.find({ age: { $gte: 25 } }, { _id: 0, name: 1, age: 1 });
```

**Sortie**

```
{ "name" : "Jane", "age" : 25 }
{ "name" : "Bob", "age" : 30 }
{ "name" : "Alice", "age" : 35 }
```

## Exemples de code
<a name="gte-code"></a>

Pour afficher un exemple de code d'utilisation de la `$gte` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur d'Amazon DocumentDB est un opérateur de requête logique qui vous permet de rechercher des documents dont la valeur d'un champ est égale à l'une des valeurs spécifiées dans un tableau.

**Paramètres**
+ `field`: le champ à vérifier par rapport au tableau fourni.
+ `[value1, value2, ...]`: tableau de valeurs à mettre en correspondance avec le champ spécifié.

 

**Dollar (`$`) dans les noms de champs**

Consultez [Dollar (\$1) et point (.) dans les noms de champs](functional-differences.md#functional-differences-dollardot) les limites relatives à l'interrogation de champs `$` préfixés `$in` dans des objets imbriqués.

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

L'exemple suivant montre comment utiliser l'`$in`opérateur pour rechercher des documents dont le `color` champ est l'une des valeurs du tableau fourni.

**Création d'exemples de documents**

```
db.colors.insertMany([
  { "_id": 1, "color": "red" },
  { "_id": 2, "color": "green" },
  { "_id": 3, "color": "blue" },
  { "_id": 4, "color": "yellow" },
  { "_id": 5, "color": "purple" }
])
```

**Exemple de requête**

```
db.colors.find({ "color": { "$in": ["red", "blue", "purple"] } })
```

**Sortie**

```
{ "_id": 1, "color": "red" },
{ "_id": 3, "color": "blue" },
{ "_id": 5, "color": "purple" }
```

## Exemples de code
<a name="in-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$in` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Nouveau depuis la version 4.0.

Non pris en charge par le cluster Elastic.

L'`$jsonSchema`opérateur dans Amazon DocumentDB est utilisé pour filtrer les documents en fonction d'un schéma JSON spécifié. Cet opérateur vous permet d'interroger des documents qui correspondent à un schéma JSON particulier, en veillant à ce que les documents récupérés respectent les exigences spécifiques en matière de structure et de type de données.

À l'aide de l'opérateur de requête d'`$jsonSchema`évaluation dans le cadre de la création d'une collection, vous pouvez valider le schéma des documents insérés dans la collection. Voir [Utilisation de la validation du schéma JSON](json-schema-validation.md) pour plus d'informations.

**Paramètres**
+ `required`(tableau) : Spécifie les champs obligatoires dans le document.
+ `properties`(objet) : définit le type de données et les autres contraintes pour chaque champ du document.

## Exemple (MongoDB Shell)
<a name="jsonSchema-examples"></a>

L'exemple suivant illustre l'utilisation de l'`$jsonSchema`opérateur pour filtrer la `employees` collection afin de récupérer uniquement les documents contenant les `name` `age` champs, et et le `employeeId` champ est de type`string`. `employeeId`

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.employees.aggregate([
  { $match: {
    $jsonSchema: {
      required: ["name", "employeeId", "age"],
      properties: { "employeeId": { "bsonType": "string" } }
    }
  }}
]);
```

**Sortie**

```
{ "_id" : ObjectId("6908e8b61f77fc26b2ecd26f"), "name" : { "firstName" : "Emily", "lastName" : "Brown" }, "employeeId" : "2", "age" : 25 }
```

## Exemples de code
<a name="jsonSchema-code"></a>

Pour afficher un exemple de code d'utilisation de la `$jsonSchema` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour faire correspondre les valeurs inférieures à la valeur spécifiée. Cet opérateur est utile pour filtrer et interroger des données sur la base de comparaisons numériques.

**Paramètres**
+ `field`: nom du champ à vérifier.
+ `value`: valeur à comparer.

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

L'exemple suivant montre comment utiliser l'`$lt`opérateur pour récupérer des documents dont la `Inventory.OnHand` valeur est inférieure à 50.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.example.find({ "Inventory.OnHand": { $lt: 50 } })
```

**Sortie**

```
{ "_id" : 1, "Inventory" : { "OnHand" : 25, "Sold" : 60 }, "Colors" : [ "Red", "Blue" ] }
{ "_id" : 3, "Inventory" : { "OnHand" : 10, "Sold" : 85 }, "Colors" : [ "Red", "Green" ] }
```

## Exemples de code
<a name="lt-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$lt` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur de `$mod` requête sélectionne les documents pour lesquels une valeur de champ divisée par un diviseur a un reste spécifié. Cela est utile pour filtrer les documents en fonction de conditions arithmétiques modulo.

**Paramètres**
+ `divisor`: le nombre par lequel diviser.
+ `remainder`: valeur restante attendue.

## Exemple (MongoDB Shell)
<a name="mod-query-examples"></a>

L'exemple suivant montre comment utiliser l'`$mod`opérateur pour rechercher toutes les commandes dont la quantité est un nombre impair.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.orders.find({ quantity: { $mod: [2, 1] } });
```

**Sortie**

```
{ "_id" : 1, "item" : "Widget", "quantity" : 15 }
{ "_id" : 3, "item" : "Tool", "quantity" : 7 }
{ "_id" : 5, "item" : "Part", "quantity" : 9 }
```

Cette requête renvoie des documents dans lesquels le reste de la quantité divisée par 2 est égal à 1, ce qui permet de sélectionner toutes les quantités impaires.

## Exemples de code
<a name="mod-query-code"></a>

Pour afficher un exemple de code permettant d'utiliser l'opérateur de `$mod` requête, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour faire correspondre les documents dont la valeur d'un champ spécifié est inférieure ou égale à la valeur spécifiée. Cet opérateur est utile pour filtrer et interroger des données sur la base de comparaisons numériques.

**Paramètres**
+ `field`: Le champ à comparer.
+ `value`: valeur à comparer.

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

L'exemple suivant illustre l'utilisation de l'`$lte`opérateur pour récupérer des documents dont le `quantity` champ est inférieur ou égal à 10.

**Création d'exemples de documents**

```
db.inventory.insertMany([
  { item: "canvas", qty: 100 },
  { item: "paint", qty: 50 },
  { item: "brush", qty: 10 },
  { item: "paper", qty: 5 }
]);
```

**Exemple de requête**

```
db.inventory.find({ qty: { $lte: 10 } });
```

**Sortie**

```
{ "_id" : ObjectId("..."), "item" : "brush", "qty" : 10 },
{ "_id" : ObjectId("..."), "item" : "paper", "qty" : 5 }
```

## Exemples de code
<a name="lte-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$lte` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur est utilisé pour accéder aux métadonnées associées à l'exécution de la requête en cours. Cet opérateur est principalement utilisé pour les opérations de recherche de texte, où les métadonnées peuvent fournir des informations sur la pertinence des documents correspondants.

**Paramètres**
+ `textScore`: Récupère le score de recherche de texte pour le document. Ce score indique la pertinence du document par rapport à la requête de recherche textuelle.

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

L'exemple suivant montre comment utiliser l'`$meta`opérateur pour récupérer le score de recherche de texte pour les documents correspondant à une requête de recherche de texte.

**Création d'exemples de documents**

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

**Création d'un index de texte**

```
db.documents.createIndex({ content: "text" });
```

**Exemple de requête**

```
db.documents.find(
  { $text: { $search: "coffee" } },
  { _id: 0, title: 1, content: 1, score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } });
```

**Sortie**

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

## Exemples de code
<a name="meta-code"></a>

Pour afficher un exemple de code d'utilisation de la `$meta` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur est utilisé pour faire correspondre les documents dont la valeur d'un champ n'est pas égale à la valeur spécifiée. Il s'agit d'un opérateur de comparaison qui peut être utilisé dans les prédicats de requête pour filtrer les documents.

La version 2.0 du planificateur a ajouté le support des index pour`$ne`.

**Paramètres**
+ `field`: Le champ à vérifier.
+ `value`: valeur à comparer.

## Exemple (MongoDB Shell)
<a name="ne-examples"></a>

Dans cet exemple, nous trouverons tous les documents de la `users` collection dont le `status` champ n'est pas égal à`"active"`.

**Création d'exemples de documents**

```
db.users.insertMany([
  { name: "John", status: "active" },
  { name: "Jane", status: "inactive" },
  { name: "Bob", status: "suspended" },
  { name: "Alice", status: "active" }
]);
```

**Exemple de requête**

```
db.users.find({ status: { $ne: "active" } });
```

**Sortie**

```
[
  {
    _id: ObjectId('...'),
    name: 'Jane',
    status: 'inactive'
  },
  {
    _id: ObjectId('...'),
    name: 'Bob',
    status: 'suspended'
  }
]
```

## Exemples de code
<a name="ne-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$ne` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur est utilisé pour faire correspondre des valeurs qui ne figurent pas dans le tableau spécifié. Il s'agit de l'inverse de l'`$in`opérateur, qui correspond aux valeurs figurant dans le tableau spécifié.

La version 2.0 du planificateur a ajouté le support des index pour`$nin`.

**Paramètres**
+ `field`: Le champ à vérifier.
+ `array`: le tableau de valeurs à comparer.

 

**Dollar (`$`) dans les noms de champs**

Consultez [Dollar (\$1) et point (.) dans les noms de champs](functional-differences.md#functional-differences-dollardot) les limites relatives à l'interrogation de champs `$` préfixés `$nin` dans des objets imbriqués.

## Exemple (MongoDB Shell)
<a name="nin-examples"></a>

L'exemple suivant montre comment utiliser l'`$nin`opérateur pour rechercher des documents dont le `category` champ n'est pas égal à « Fiction » ou « Mystère ».

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.books.find({
  category: {
    $nin: ["Fiction", "Mystery"]
  }
})
```

**Sortie**

```
[
  {
    _id: ObjectId('...'),
    title: 'The Martian',
    author: 'Andy Weir',
    category: 'Science Fiction'
  },
  {
    _id: ObjectId('...'),
    title: 'The Alchemist',
    author: 'Paulo Coelho',
    category: 'Philosophy'
  }
]
```

## Exemples de code
<a name="nin-code"></a>

Pour afficher un exemple de code d'utilisation de la `$nin` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur est utilisé pour faire correspondre les documents pour lesquels aucune des conditions de requête spécifiées n'est vraie. Elle est similaire à l'opération logique « NOR », où le résultat est vrai si aucun des opérandes n'est vrai.

**Paramètres**
+ `expression1`: première expression à évaluer.
+ `expression2`: deuxième expression à évaluer.
+ `expressionN`: expressions supplémentaires à évaluer.

## Exemple (MongoDB Shell)
<a name="nor-examples"></a>

L'exemple suivant illustre l'utilisation de l'`$nor`opérateur en récupérant des documents dont le `qty` champ n'est pas inférieur à 20 et le `size` champ n'est pas égal à « XL ».

**Création d'exemples de documents**

```
db.items.insertMany([
  { qty: 10, size: "M" },
  { qty: 15, size: "XL" },
  { qty: 25, size: "L" },
  { qty: 30, size: "XL" }
])
```

**Exemple de requête**

```
db.items.find({
  $nor: [
    { qty: { $lt: 20 } },
    { size: "XL" }
  ]
})
```

**Sortie**

```
[
  { "_id" : ObjectId("..."), "qty" : 25, "size" : "L" }
]
```

## Exemples de code
<a name="nor-code"></a>

Pour afficher un exemple de code d'utilisation de la `$nor` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur est utilisé pour annuler le résultat d'une expression donnée. Il vous permet de sélectionner des documents pour lesquels la condition spécifiée ne correspond pas.

La version 2.0 du planificateur a ajouté le support des index pour `$not {eq}` et`$not {in}`.

**Paramètres**
+ `expression`: expression à annuler.

## Exemple (MongoDB Shell)
<a name="not-examples"></a>

L'exemple suivant montre comment utiliser l'`$not`opérateur pour rechercher des documents dont le `status` champ n'est pas égal à « actif ».

**Création d'exemples de documents**

```
db.users.insertMany([
  { name: "John", status: "active" },
  { name: "Jane", status: "inactive" },
  { name: "Bob", status: "pending" },
  { name: "Alice", status: "active" }
]);
```

**Exemple de requête**

```
db.users.find({ status: { $not: { $eq: "active" } } });
```

**Sortie**

```
[
  {
    _id: ObjectId('...'),
    name: 'Jane',
    status: 'inactive'
  },
  {
    _id: ObjectId('...'),
    name: 'Bob',
    status: 'pending'
  }
]
```

## Exemples de code
<a name="not-code"></a>

Pour afficher un exemple de code d'utilisation de la `$not` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur est utilisé pour effectuer une opération logique OR sur un tableau de deux expressions ou plus. Elle renvoie les documents qui correspondent à au moins une des expressions. Cet opérateur est utile lorsque vous devez rechercher des documents qui répondent à l'une de plusieurs conditions.

**Paramètres**
+ `expression1`: première expression à évaluer.
+ `expression2`: deuxième expression à évaluer.
+ `...`: expressions supplémentaires à évaluer (facultatif).

## Exemple (MongoDB Shell)
<a name="or-examples"></a>

L'exemple suivant montre comment utiliser l'`$or`opérateur pour rechercher des documents contenant `make` TruckForYou soit « » avec le modèle « Heavy H1 », soit « SportForYou » avec le modèle « Bolid 1 ».

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.cars.find({
  $or: [
    { make: "TruckForYou", model: "Heavy H1" },
    { make: "SportForYou", model: "Bolid 1" }
  ]
});
```

**Sortie**

```
[
  {
    _id: ObjectId('...'),
    make: 'TruckForYou',
    model: 'Heavy H1',
    year: 2020
  },
  {
    _id: ObjectId('...'),
    make: 'SportForYou',
    model: 'Bolid 1',
    year: 2021
  }
]
```

## Exemples de code
<a name="or-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$or` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur vous permet d'effectuer une correspondance d'expressions régulières sur des champs de chaîne. Il s'agit d'un outil puissant pour rechercher et filtrer des documents en fonction de modèles complexes.

**Paramètres**
+ `regular expression`: le modèle d'expression régulière à associer au champ.
+ `$options`: (facultatif) Fournit des options permettant de modifier le comportement de recherche, telles que la distinction majuscules/minuscules, la correspondance globale, etc.

## Exemple (MongoDB Shell)
<a name="regex-examples"></a>

L'exemple suivant illustre l'utilisation de l'`$regex`opérateur pour rechercher des documents dont le champ « nom » correspond à un modèle spécifique.

**Création d'exemples de documents**

```
db.users.insertMany([
  { name: "John Doe" },
  { name: "Jane Smith" },
  { name: "Alice Johnson" },
  { name: "Bob Williams" },
  { name: "Charlie Davis" }
]);
```

**Exemple de requête**

```
db.users.find({ name: { $regex: /^A/ } })
```

**Sortie**

```
[
  { "_id" : ObjectId("..."), "name" : "Alice Johnson" }
]
```

Cette requête renverra tous les documents dont le champ « nom » commence par la lettre « A ».

## Exemples de code
<a name="regex-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$regex` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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'opérateur `$slice` de projection limite le nombre d'éléments du tableau renvoyés dans le résultat d'une requête. Il vous permet de récupérer un nombre spécifique d'éléments depuis le début ou la fin d'un champ de tableau sans charger le tableau entier.

**Paramètres**
+ `field`: le champ du tableau à projeter.
+ `count`: Nombre d'éléments à renvoyer. Les valeurs positives renvoient les éléments depuis le début, les valeurs négatives depuis la fin.

## Exemple (MongoDB Shell)
<a name="slice-projection-examples"></a>

L'exemple suivant montre comment utiliser l'opérateur de `$slice` projection pour renvoyer uniquement les deux premiers éléments d'un champ de tableau.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.inventory.find(
  {},
  { item: 1, tags: { $slice: 2 } }
)
```

**Sortie**

```
{ "_id" : 1, "item" : "notebook", "tags" : [ "office", "school" ] }
{ "_id" : 2, "item" : "pen", "tags" : [ "office", "writing" ] }
{ "_id" : 3, "item" : "folder", "tags" : [ "office", "supplies" ] }
```

## Exemples de code
<a name="slice-projection-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur de `$slice` projection, sélectionnez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur de `$size` requête fait correspondre les documents dans lesquels un champ de tableau contient exactement le nombre d'éléments spécifié. Cela est utile pour filtrer les documents en fonction de la longueur du tableau.

**Paramètres**
+ `field`: le champ du tableau à vérifier.
+ `count`: le nombre exact d'éléments que le tableau doit contenir.

## Exemple (MongoDB Shell)
<a name="size-query-examples"></a>

L'exemple suivant montre comment utiliser l'`$size`opérateur pour rechercher tous les produits comportant exactement trois balises.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.products.find({ tags: { $size: 3 } });
```

**Sortie**

```
{ "_id" : 1, "name" : "Laptop", "tags" : [ "electronics", "computers", "portable" ] }
{ "_id" : 3, "name" : "Desk", "tags" : [ "furniture", "office", "workspace" ] }
```

## Exemples de code
<a name="size-query-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur de `$size` requête, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur est utilisé pour effectuer une recherche en texte intégral dans les champs indexés au sein d'une collection de documents. Cet opérateur vous permet de rechercher des documents contenant des mots ou des phrases spécifiques et peut être combiné à d'autres opérateurs de requête pour filtrer les résultats en fonction de critères supplémentaires.

**Paramètres**
+ `$search`: chaîne de texte à rechercher.

## Exemple (MongoDB Shell)
<a name="text-examples"></a>

L'exemple suivant montre comment utiliser l'`$text`opérateur pour rechercher des documents contenant le mot « intérêt » et filtrer les résultats en fonction d'un champ « star\$1rating ».

**Création d'exemples de documents**

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

**Création d'un index de texte**

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

**Exemple de requête**

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

**Sortie**

```
{ "_id" : 5, "star_rating" : 5, "comments" : "interesting couch" }
{ "_id" : 6, "star_rating" : 5, "comments" : "interested in couch for sale, year 2022" }
```

La commande ci-dessus renvoie des documents contenant un champ indexé sous forme de texte contenant n'importe quelle forme d' « intérêt » et un « star\$1rating » égal à 5.

## Exemples de code
<a name="text-code"></a>

Pour afficher un exemple de code d'utilisation de la `$text` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur est utilisé pour vérifier le type de données d'un champ dans un document. Il peut être utilisé lorsque des opérations ou des validations spécifiques au type sont nécessaires. L'`$type`opérateur renvoie le type BSON de l'expression évaluée. Le type renvoyé est une chaîne, qui correspond au type du champ ou de l'expression.

La version 2.0 du planificateur a ajouté le support des index pour`$type`.

**Paramètres**
+ `expression`: expression à évaluer.

## Exemple (MongoDB Shell)
<a name="type-examples"></a>

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.documents.find({
  $or: [
    { age: { $type: "number" } },
    { email: { $type: "string" } },
    { name: { $type: "string" } }
  ]
})
```

**Sortie**

```
[
  { "_id": 1, "name": "John", "age": 30, "email": "john@example.com" },
  { "_id": 2, "name": "Jane", "age": "25", "email": 123456 }
]
```

Cette requête renverra les documents dont le `age` champ est de type « nombre », le `email` champ est de type « chaîne » et le `name` champ est de type « chaîne ».

## Exemples de code
<a name="type-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$type` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

------

# Mettre à jour les opérateurs
<a name="mongo-apis-update-operators"></a>

Cette section fournit des informations détaillées sur les opérateurs de mise à jour pris en charge par 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'opérateur `$` positionnel met à jour le premier élément du tableau qui correspond à la condition de requête. Il agit comme un espace réservé pour la position de l'élément du tableau correspondant.

**Paramètres**
+ `field.$`: Le champ du tableau avec l'opérateur de position pour mettre à jour le premier élément correspondant.

## Exemple (MongoDB Shell)
<a name="dollar-update-examples"></a>

L'exemple suivant montre comment utiliser l'opérateur `$` positionnel pour mettre à jour un élément de tableau spécifique.

**Création d'exemples de documents**

```
db.inventory.insertMany([
  { _id: 1, item: "Widget", quantities: [10, 20, 30] },
  { _id: 2, item: "Gadget", quantities: [5, 15, 25] }
]);
```

**Exemple de requête**

```
db.inventory.updateOne(
  { _id: 1, quantities: 20 },
  { $set: { "quantities.$": 22 } }
);
```

**Sortie**

```
{
  "_id" : 1,
  "item" : "Widget",
  "quantities" : [ 10, 22, 30 ]
}
```

## Exemples de code
<a name="dollar-update-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de l'opérateur `$` positionnel, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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'opérateur de position `$[]` all met à jour tous les éléments d'un tableau. Il est utilisé lorsque vous devez modifier chaque élément d'un champ de tableau.

**Paramètres**
+ `field.$[]`: Le champ du tableau avec l'opérateur de position all pour mettre à jour tous les éléments.

## Exemple (MongoDB Shell)
<a name="dollarBrackets-update-examples"></a>

L'exemple suivant montre comment utiliser l'`$[]`opérateur pour mettre à jour tous les éléments d'un tableau.

**Création d'exemples de documents**

```
db.products.insertOne({
  _id: 1,
  name: "Laptop",
  prices: [1000, 1100, 1200]
});
```

**Exemple de requête**

```
db.products.updateOne(
  { _id: 1 },
  { $inc: { "prices.$[]": 50 } }
);
```

**Sortie**

```
{
  "_id" : 1,
  "name" : "Laptop",
  "prices" : [ 1050, 1150, 1250 ]
}
```

## Exemples de code
<a name="dollarBrackets-update-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de `$[]` l'opérateur, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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'opérateur de position `$[<identifier>]` filtré met à jour tous les éléments du tableau qui répondent aux conditions de filtre spécifiées. Il est utilisé avec l'`arrayFilters`option de mise à jour sélective des éléments du tableau.

**Paramètres**
+ `field.$[identifier]`: Le champ du tableau avec l'opérateur de position filtré.
+ `arrayFilters`: ensemble de conditions de filtre qui déterminent les éléments à mettre à jour.

## Exemple (MongoDB Shell)
<a name="dollarIdentifier-update-examples"></a>

L'exemple suivant montre comment utiliser l'`$[<identifier>]`opérateur pour mettre à jour des éléments de tableau spécifiques en fonction d'une condition.

**Création d'exemples de documents**

```
db.students.insertOne({
  _id: 1,
  name: "Alice",
  grades: [
    { subject: "Math", score: 85 },
    { subject: "Science", score: 92 },
    { subject: "History", score: 78 }
  ]
});
```

**Exemple de requête**

```
db.students.updateOne(
  { _id: 1 },
  { $inc: { "grades.$[elem].score": 5 } },
  { arrayFilters: [{ "elem.score": { $gte: 80 } }] }
);
```

**Sortie**

```
{
  "_id" : 1,
  "name" : "Alice",
  "grades" : [
    { "subject" : "Math", "score" : 90 },
    { "subject" : "Science", "score" : 97 },
    { "subject" : "History", "score" : 78 }
  ]
}
```

## Exemples de code
<a name="dollarIdentifier-update-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de `$[<identifier>]` l'opérateur, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour ajouter une valeur à un tableau uniquement si la valeur n'est pas déjà présente dans le tableau. Cela est utile pour garantir qu'un tableau contient des éléments uniques.

**Paramètres**
+ `field`: champ à mettre à jour.
+ `value`: valeur à ajouter au champ du tableau. Il peut s'agir d'une valeur unique ou d'une expression.

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

L'exemple suivant montre comment utiliser l'`$addToSet`opérateur pour ajouter des éléments uniques à un tableau.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.products.update(
  { "item": "apple" },
  { $addToSet: { "tags": "green" } }
)
```

**Sortie**

```
{ "_id": 1, "item": "apple", "tags": ["fruit", "red", "round", "green"] }
```

Dans cet exemple, l'`$addToSet`opérateur ajoute la balise « verte » au tableau « tags » du document où le champ « item » est « apple ». Comme le mot « vert » ne figurait pas déjà dans le tableau, il a été ajouté.

## Exemples de code
<a name="addToSet-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$addToSet` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur d'Amazon DocumentDB vous permet d'effectuer des opérations binaires sur les bits d'un champ donné. Cela peut être utile pour des tâches telles que le réglage, l'effacement ou la vérification de l'état de bits individuels au sein d'un nombre.

**Paramètres**
+ `field`: champ sur lequel effectuer des opérations au niveau du bit.
+ `and`: valeur entière utilisée pour effectuer une opération ET au niveau du bit sur le terrain.
+ `or`: valeur entière utilisée pour effectuer une opération OR au niveau du bit sur le terrain.
+ `xor`: valeur entière utilisée pour effectuer une opération XOR bit à bit sur le terrain.

## Exemple (MongoDB Shell)
<a name="bit-examples"></a>

L'exemple suivant montre comment utiliser l'`$bit`opérateur pour effectuer des opérations au niveau du bit sur un champ numérique.

**Création d'exemples de documents**

```
db.numbers.insert([
  { "_id": 1, "number": 5 },
  { "_id": 2, "number": 12 }
])
```

**Exemple de requête**

```
db.numbers.update(
  { "_id": 1 },
  { "$bit": { "number": { "and": 3 } } }
)
```

**Sortie**

```
{
  "_id": 1,
  "number": 1
}
```

Dans cet exemple, l'`$bit`opérateur est utilisé pour effectuer une opération AND bit à bit sur le champ « numéro » du document avec le `_id` chiffre 1. Le résultat est que la valeur du champ « numéro » est définie sur 1, résultat de l'opération AND bit à bit entre la valeur initiale de 5 et la valeur 3.

## Exemples de code
<a name="bit-code"></a>

Pour afficher un exemple de code d'utilisation de la `$bit` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur est utilisé pour définir la valeur d'un champ à la date et à l'heure actuelles. Cet opérateur est utile pour mettre à jour automatiquement un champ avec l'horodatage actuel lorsqu'un document est inséré ou mis à jour.

**Paramètres**
+ `field`: champ à mettre à jour avec la date et l'heure actuelles.
+ `type`: (facultatif) Spécifie le type BSON à utiliser pour la date actuelle. Peut avoir la valeur `date` ou `timestamp`.

## Exemple (MongoDB Shell)
<a name="currentDate-examples"></a>

L'exemple suivant montre comment utiliser l'`$currentDate`opérateur pour définir le `lastModified` champ à la date et à l'heure actuelles d'insertion d'un nouveau document.

**Création d'exemples de documents**

```
db.users.insert({
  name: "John Doe",
  email: "john.doe@example.com"
})
```

**Exemple de requête**

```
db.users.updateOne(
  { name: "John Doe" },
  { $currentDate: { lastModified: true } }
)
```

**Afficher le document mis à jour**

```
db.users.findOne({ name: "John Doe" })
```

**Sortie**

```
{
  _id: ObjectId('...'),
  name: 'John Doe',
  email: 'john.doe@example.com',
  lastModified: ISODate('2025-10-25T22:50:29.963Z')
}
```

## Exemples de code
<a name="currentDate-code"></a>

Pour afficher un exemple de code d'utilisation de la `$currentDate` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur est utilisé conjointement avec d'autres opérateurs de mise à jour, tels que `$push` et`$addToSet`, pour ajouter plusieurs valeurs à un champ de tableau. Il permet d'ajouter plusieurs éléments à un tableau en une seule opération, plutôt que d'avoir à exécuter plusieurs opérations de mise à jour.

**Paramètres**
+ `value`: tableau de valeurs à ajouter au champ du tableau.

## Exemple (MongoDB Shell)
<a name="each-examples"></a>

L'exemple suivant montre comment utiliser l'`$each`opérateur avec l'`$push`opérateur pour ajouter plusieurs éléments à un champ de tableau.

**Création d'exemples de documents**

```
db.fruits.insertOne({
  _id: 1,
  fruits: ["apple", "banana"]
})
```

**Exemple de requête**

```
db.fruits.updateOne(
  { _id: 1 },
  { $push: { fruits: { $each: ["cherry", "durian", "elderberry"] } } }
)
```

**Afficher le document mis à jour**

```
db.fruits.findOne({ _id: 1 })
```

**Sortie**

```
{
  _id: 1,
  fruits: [ 'apple', 'banana', 'cherry', 'durian', 'elderberry' ]
}
```

## Exemples de code
<a name="each-code"></a>

Pour afficher un exemple de code d'utilisation de la `$each` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur est utilisé pour incrémenter la valeur d'un champ d'un montant spécifié. Il est utilisé pour mettre à jour un champ numérique, tel qu'un compteur ou une évaluation, sans avoir à récupérer la valeur actuelle, à calculer la nouvelle valeur, puis à mettre à jour le champ.

**Paramètres**
+ `field`: nom du champ à incrémenter.
+ `amount`: montant par lequel le champ doit être incrémenté. Il peut s'agir d'une valeur positive ou négative.

## Exemple (MongoDB Shell)
<a name="inc-examples"></a>

L'exemple suivant montre comment utiliser l'`$inc`opérateur pour incrémenter le `age` champ d'un document.

**Création d'exemples de documents**

```
db.users.insertOne({_id: 123, name: "John Doe", age: 30})
```

**Exemple de requête**

```
db.users.updateOne({_id: 123}, {$inc: {age: 1}})
```

**Afficher le document mis à jour**

```
db.users.findOne({_id: 123})
```

**Sortie**

```
{ "_id" : 123, "name" : "John Doe", "age" : 31 }
```

## Exemples de code
<a name="inc-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$inc` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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'opérateur de `$max` mise à jour met à jour la valeur d'un champ uniquement si la valeur spécifiée est supérieure à la valeur du champ actuel. Cet opérateur est utile pour maintenir les valeurs maximales entre les mises à jour.

**Paramètres**
+ `field`: champ à mettre à jour.
+ `value`: valeur à comparer avec la valeur actuelle du champ.

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

L'exemple suivant montre comment utiliser l'`$max`opérateur pour mettre à jour le score le plus élevé enregistré pour un joueur.

**Création d'exemples de documents**

```
db.scores.insertMany([
  { _id: 1, player: "Alice", highScore: 85 },
  { _id: 2, player: "Bob", highScore: 92 },
  { _id: 3, player: "Charlie", highScore: 78 }
])
```

**Exemple de mise à jour**

```
db.scores.updateOne(
  { _id: 1 },
  { $max: { highScore: 95 } }
)
```

**Result**

Le `highScore` champ pour Alice est mis à jour à 95 car 95 est supérieur à la valeur actuelle de 85.

```
{ "_id": 1, "player": "Alice", "highScore": 95 }
```

## Exemples de code
<a name="max-update-code"></a>

Pour afficher un exemple de code d'utilisation de la `$max` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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'opérateur de `$min` mise à jour met à jour la valeur d'un champ uniquement si la valeur spécifiée est inférieure à la valeur du champ actuel. Cet opérateur est utile pour maintenir les valeurs minimales lors des mises à jour.

**Paramètres**
+ `field`: champ à mettre à jour.
+ `value`: valeur à comparer avec la valeur actuelle du champ.

## Exemple (MongoDB Shell)
<a name="min-update-examples"></a>

L'exemple suivant montre comment utiliser l'`$min`opérateur pour mettre à jour la température la plus basse enregistrée pour une station météo.

**Création d'exemples de documents**

```
db.weather.insertMany([
  { _id: 1, station: "Station A", lowestTemp: 15 },
  { _id: 2, station: "Station B", lowestTemp: 20 },
  { _id: 3, station: "Station C", lowestTemp: 18 }
])
```

**Exemple de mise à jour**

```
db.weather.updateOne(
  { _id: 1 },
  { $min: { lowestTemp: 12 } }
)
```

**Result**

Le `lowestTemp` champ de la station A est mis à jour à 12 car 12 est inférieur à la valeur actuelle de 15.

```
{ "_id": 1, "station": "Station A", "lowestTemp": 12 }
```

## Exemples de code
<a name="min-update-code"></a>

Pour afficher un exemple de code d'utilisation de la `$min` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour multiplier la valeur d'un champ par un nombre spécifié. Cela peut être utile pour mettre à jour plusieurs documents de manière atomique et cohérente, par exemple pour mettre à jour les miles de vol en fonction du statut d'une carte de crédit.

**Paramètres**
+ `field`: Le champ à multiplier.
+ `multiplier`: le nombre par lequel multiplier la valeur du champ.

## Exemple (MongoDB Shell)
<a name="mul-examples"></a>

Cet exemple montre comment utiliser l'`$mul`opérateur pour doubler la `flight_miles` valeur de tous les documents où se trouve le `credit_card` champ`true`.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.miles.update(
  { "credit_card": { "$eq": true } },
  { "$mul": { "flight_miles.$[]": NumberInt(2) } },
  { "multi": true }
);
```

**Sortie**

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

Pour les clients détenteurs d'une carte de crédit, leurs miles de vol ont été doublés.

L'opérateur de tableau `$[]` positionnel est utilisé pour appliquer l'`$mul`opération à chaque élément du `flight_miles` tableau.

## Exemples de code
<a name="mul-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$mul` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour supprimer le premier ou le dernier élément d'un champ de tableau. Cela est particulièrement utile lorsque vous devez gérer un tableau de taille fixe ou implémenter une structure de données semblable à une file d'attente dans un document.

**Paramètres**
+ `field`: nom du champ du tableau dont un élément doit être supprimé.
+ `value`: valeur entière qui détermine la position de l'élément à supprimer. La valeur de `1` supprime le dernier élément, tandis que la valeur de `-1` supprime le premier élément.

## Exemple (MongoDB Shell)
<a name="pop-examples"></a>

Cet exemple montre comment utiliser l'`$pop`opérateur pour supprimer le premier et le dernier élément d'un champ de tableau.

**Création d'exemples de documents**

```
db.users.insertMany([
  { "_id": 1, "name": "John Doe", "hobbies": ["reading", "swimming", "hiking"] },
  { "_id": 2, "name": "Jane Smith", "hobbies": ["cooking", "gardening", "painting"] }
])
```

**Exemple de requête**

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

**Sortie**

```
{ "_id" : 1, "name" : "John Doe", "hobbies" : [ "swimming", "hiking" ] }
{ "_id" : 2, "name" : "Jane Smith", "hobbies" : [ "cooking", "gardening" ] }
```

## Exemples de code
<a name="pop-code"></a>

Pour afficher un exemple de code d'utilisation de la `$pop` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
  const client = await MongoClient.connect('mongodb://<username>:<password>@<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>

Le `$position` modificateur dans Amazon DocumentDB indique l'emplacement dans le tableau où l'`$push`opérateur insère les éléments. Sans le `$position` modificateur, l'`$push`opérateur insère des éléments à la fin du tableau.

**Paramètres**
+ `field`: champ du tableau à mettre à jour.
+ `num`: position dans le tableau où les éléments doivent être insérés, sur la base d'une indexation basée sur zéro.

**Remarque** : Pour utiliser le `$position` modificateur, il doit apparaître avec le `$each` modificateur.

## Exemple (MongoDB Shell)
<a name="position-examples"></a>

L'exemple suivant montre comment utiliser l'`$position`opérateur pour insérer des tâches à des positions spécifiques dans un système de gestion de projet.

**Création d'exemples de documents**

```
db.projects.insertOne({ "_id": 1, "name": "Website Redesign", "tasks": ["Design mockups"] })
```

**Exemple de requête 1 - Ajouter des tâches urgentes au début**

```
db.projects.updateOne(
   { _id: 1 },
   {
     $push: {
        tasks: {
           $each: ["Security audit", "Performance review"],
           $position: 0
        }
     }
   }
)
```

**Sortie 1**

```
{ "_id": 1, "name": "Website Redesign", "tasks": ["Security audit", "Performance review", "Design mockups"] }
```

**Exemple de requête 2 - Ajouter des tâches à une position spécifique**

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

**Produit 2**

```
{ "_id": 2, "name": "Mobile App", "tasks": ["Setup project", "Create wireframes", "Code review", "Testing phase", "Deploy to store"] }
```

## Exemples de code
<a name="position-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$position` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur est utilisé pour supprimer d'un tableau toutes les instances d'une valeur ou de valeurs correspondant à une condition spécifiée. Cet opérateur est utile lorsque vous devez supprimer des éléments spécifiques d'un champ de tableau dans un document.

**Paramètres**
+ `field`: nom du champ du tableau dont vous souhaitez supprimer la ou les valeurs.
+ `value`: valeur ou condition qui détermine le ou les éléments à supprimer du tableau.

## Exemple (MongoDB Shell)
<a name="pull-examples"></a>

L'exemple suivant montre comment utiliser l'`$pull`opérateur pour supprimer des éléments d'un champ de tableau.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.restaurants.updateMany(
  { cuisine: "Italian" },
  { $pull: { features: "Takeout" } }
)
```

**Sortie**

```
{
  "acknowledged" : true,
  "matchedCount" : 1,
  "modifiedCount" : 1
}
```

La requête ci-dessus supprime la fonction « Takeout » de tous les documents dont le `cuisine` champ est « italien ».

## Exemples de code
<a name="pull-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$pull` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour supprimer toutes les instances des valeurs spécifiées d'un champ de tableau. Cela est particulièrement utile lorsque vous devez supprimer plusieurs éléments d'un tableau en une seule opération.

**Paramètres**
+ `field`: nom du champ du tableau dans lequel les éléments doivent être supprimés.
+ `value`: tableau de valeurs à supprimer du champ du tableau.

## Exemple (MongoDB Shell)
<a name="pullAll-examples"></a>

L'exemple suivant montre comment utiliser l'`$pullAll`opérateur pour supprimer plusieurs éléments d'un champ de tableau.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.restaurants.update(
  { "name": "Taj Mahal" },
  { $pullAll: { "features": ["Private Dining", "Live Music"] } }
)
```

**Sortie**

```
{
  "name": "Taj Mahal",
  "cuisine": "Indian",
  "features": []
}
```

## Exemples de code
<a name="pullAll-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$pullAll` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour ajouter un élément à un champ de tableau dans un document. Cet opérateur est particulièrement utile lorsque vous devez ajouter de nouvelles données à un tableau existant sans remplacer le tableau entier.

**Paramètres**
+ `field`: nom du champ du tableau auquel le nouvel élément doit être ajouté.
+ `value`: valeur à ajouter au tableau.
+ `position`: (facultatif) Un modificateur qui spécifie la position dans le tableau où le nouvel élément doit être ajouté. Les modificateurs pris en charge incluent `$` (ajouter à la fin du tableau) et `$[]` (ajouter à la fin du tableau, en ignorant les filtres du tableau).

## Exemple (MongoDB Shell)
<a name="push-examples"></a>

L'exemple suivant montre comment utiliser l'`$push`opérateur pour ajouter de nouveaux éléments à un champ de tableau dans un document.

**Création d'exemples de documents**

```
db.users.insert([
  { _id: 1, name: "John Doe", hobbies: ["reading", "swimming"] },
  { _id: 2, name: "Jane Smith", hobbies: ["gardening", "cooking"] }
])
```

**Exemple de requête**

```
db.users.updateOne(
  { _id: 1 },
  { $push: { hobbies: "hiking" } }
)
```

**Sortie**

```
{
  "acknowledged" : true,
  "matchedCount" : 1,
  "modifiedCount" : 1
}
```

Après avoir exécuté la mise à jour, le `hobbies` tableau du document contenant `_id: 1` sera mis à jour en`[&quot;reading&quot;, &quot;swimming&quot;, &quot;hiking&quot;]`.

## Exemples de code
<a name="push-code"></a>

Pour afficher un exemple de code d'utilisation de la `$push` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour renommer un champ dans un document. Cet opérateur peut être particulièrement utile lorsque vous devez mettre à jour la structure de vos documents ou les aligner sur de nouveaux modèles de données.

**Paramètres**
+ `field`: champ à renommer.
+ `newName`: nouveau nom du champ.

## Exemple (MongoDB Shell)
<a name="rename-examples"></a>

L'exemple suivant montre comment utiliser l'`$rename`opérateur pour renommer le `&quot;Date.DoW&quot;` champ `&quot;Date.DayOfWeek&quot;` en dans un document dont le `&quot;DocName&quot;` champ est défini sur. `&quot;Document 1&quot;`

**Création d'exemples de documents**

```
db.example.insertOne({
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    },
    "Words": 2482
})
```

**Exemple de requête**

```
db.example.update(
    { "DocName": "Document 1" },
    { $rename: { "Date.DoW": "Date.DayOfWeek" } }
)
```

**Sortie**

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DayOfWeek": "Saturday"
    },
    "Words": 2482
}
```

## Exemples de code
<a name="rename-code"></a>

Pour afficher un exemple de code d'utilisation de la `$rename` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

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

async function example() {
    const client = await MongoClient.connect('mongodb://<username>:<password>@<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`opérateur dans Amazon DocumentDB est utilisé pour mettre à jour la valeur d'un champ spécifié dans un document. Cet opérateur vous permet d'ajouter de nouveaux champs ou de modifier des champs existants dans un document. Il s'agit d'un opérateur de mise à jour fondamental du pilote Java MongoDB, qui est compatible avec Amazon DocumentDB.

**Paramètres**
+ `field`: champ à mettre à jour.
+ `value`: nouvelle valeur du champ.

## Exemple (MongoDB Shell)
<a name="set-examples"></a>

L'exemple suivant montre comment utiliser l'`$set`opérateur pour mettre à jour le `Item` champ dans un document.

**Création d'exemples de documents**

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

**Exemple de requête**

```
db.example.update(
  { "Item": "Pen" },
  { $set: { "Item": "Gel Pen" } }
)
```

**Sortie**

```
{
  "Item": "Gel Pen",
  "Colors": ["Red", "Green", "Blue", "Black"],
  "Inventory": {
    "OnHand": 244,
    "MinOnHand": 72
  }
}
```

## Exemples de code
<a name="set-code"></a>

Pour afficher un exemple de code d'utilisation de la `$set` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour définir la valeur d'un champ si un document est inséré, mais cela n'a aucun effet si le document est mis à jour.

**Paramètres**
+ `field`: Le champ à définir.
+ `value`: valeur à attribuer au champ.

## Exemple (MongoDB Shell)
<a name="setOnInsert-examples"></a>

L'exemple suivant illustre l'utilisation de l'`$setOnInsert`opérateur dans Amazon DocumentDB. Cela crée un nouveau document s'il n'existe pas déjà, mais cela n'a aucun effet si le document est mis à jour.

**Création d'exemples de documents**

```
db.users.insertOne({
  _id: 1,
  name: "John Doe",
  age: 30
})
```

**Exemple de requête 1 - Mettre à jour un document existant**

```
db.users.update(
  { _id: 1 },
  {
    $set: { age: 31 },
    $setOnInsert: { createdAt: new Date() }
  },
  { upsert: true }
)
```

**Sortie 1**

```
{
  _id: 1,
  name: "John Doe",
  age: 31
}
```

La sortie indique que le document a été mis à jour, mais le `createdAt` champ **n'a PAS été ajouté** car le document existait déjà. L'`$setOnInsert`opérateur ne s'applique que lors de l'insertion de nouveaux documents.

**Exemple de requête 2 - Insérer un nouveau document (upsert)**

```
db.users.update(
  { _id: 2 },
  {
    $set: { name: "Jane Smith", age: 25 },
    $setOnInsert: { createdAt: new Date() }
  },
  { upsert: true }
)
```

**Produit 2**

```
{
  _id: 2,
  name: "Jane Smith", 
  age: 25,
  createdAt: ISODate("2025-10-31T09:57:52.459Z")
}
}
```

## Exemples de code
<a name="setOnInsert-code"></a>

Pour afficher un exemple de code relatif à l'utilisation de la `$setOnInsert` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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'opérateur de `$slice` mise à jour modifie un tableau en limitant sa taille. Lorsqu'il est utilisé avec l'`$push`opérateur, il limite le nombre d'éléments d'un tableau, en ne conservant que le nombre spécifié d'éléments les plus récents ou les plus anciens.

**Paramètres**
+ `field`: le champ du tableau à modifier.
+ `count`: Nombre maximum d'éléments à conserver. Les valeurs positives conservent les N premiers éléments, les valeurs négatives conservent les N derniers éléments.

## Exemple (MongoDB Shell)
<a name="slice-update-examples"></a>

L'exemple suivant montre comment utiliser l'opérateur de `$slice` mise à jour with `$push` pour gérer un tableau de taille fixe des scores récents.

**Création d'exemples de documents**

```
db.students.insertOne({
  _id: 1,
  name: "Alice",
  scores: [85, 90, 78]
});
```

**Exemple de requête**

```
db.students.updateOne(
  { _id: 1 },
  {
    $push: {
      scores: {
        $each: [92, 88],
        $slice: -3
      }
    }
  }
)
```

**Sortie**

```
{
  "_id" : 1,
  "name" : "Alice",
  "scores" : [ 78, 92, 88 ]
}
```

Dans cet exemple, le `$slice: -3` modificateur ne conserve que les trois derniers éléments après avoir introduit de nouvelles valeurs dans le tableau.

## Exemples de code
<a name="slice-update-code"></a>

Pour afficher un exemple de code relatif `$slice` à l'utilisation de l'opérateur de mise à jour, sélectionnez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

Le modificateur de `$sort` mise à jour ordonne les éléments du tableau lorsqu'il est utilisé avec l'`$push`opérateur. Il organise les éléments du tableau par ordre croissant ou décroissant en fonction des valeurs de champ spécifiées ou des éléments eux-mêmes.

**Paramètres**
+ `field`: le champ du tableau à modifier.
+ `order`: `1` À utiliser pour l'ordre croissant ou `-1` décroissant.

## Exemple (MongoDB Shell)
<a name="sort-update-examples"></a>

L'exemple suivant montre comment utiliser le `$sort` modificateur with `$push` pour ajouter de nouveaux résultats de quiz et les trier par ordre décroissant.

**Création d'exemples de documents**

```
db.students.insertOne({
  _id: 1,
  name: "Bob",
  quizzes: [
    { score: 85, date: "2024-01-15" },
    { score: 92, date: "2024-02-10" }
  ]
});
```

**Exemple de requête**

```
db.students.updateOne(
  { _id: 1 },
  {
    $push: {
      quizzes: {
        $each: [{ score: 78, date: "2024-03-05" }],
        $sort: { score: -1 }
      }
    }
  }
)
```

**Sortie**

```
{
  "_id" : 1,
  "name" : "Bob",
  "quizzes" : [
    { "score" : 92, "date" : "2024-02-10" },
    { "score" : 85, "date" : "2024-01-15" },
    { "score" : 78, "date" : "2024-03-05" }
  ]
}
```

## Exemples de code
<a name="sort-update-code"></a>

Pour afficher un exemple de code permettant d'utiliser le modificateur de `$sort` mise à jour, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

------
#### [ 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`opérateur dans Amazon DocumentDB est utilisé pour supprimer un champ spécifique d'un document. Lorsqu'un champ est supprimé à l'aide de`$unset`, le champ est supprimé du document et la taille du document est réduite en conséquence. Cela peut être utile lorsque vous souhaitez supprimer des données inutiles de vos documents.

**Paramètres**
+ `field`: champ à supprimer du document. Il peut s'agir d'un champ unique ou d'un chemin en pointillé vers un champ imbriqué.

## Exemple (MongoDB Shell)
<a name="unset-examples"></a>

L'exemple suivant montre comment utiliser l'`$unset`opérateur pour supprimer le `Words` champ d'un document de la `example` collection.

**Création d'exemples de documents**

```
db.example.insert({
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    },
    "Words": 2482
})
```

**Exemple de requête**

```
db.example.update(
    { "DocName" : "Document 1" },
    { $unset: { Words:1 } }
)
```

**Sortie**

```
{
    "DocName": "Document 1",
    "Date": {
        "Month": 4,
        "Day": 18,
        "Year": 1987,
        "DoW": "Saturday"
    }
}
```

Dans cet exemple, l'`$unset`opérateur est utilisé pour supprimer le `Words` champ du document dont le nom est `DocName` égal à « Document 1 ». Le document obtenu ne contient plus le `Words` champ.

## Exemples de code
<a name="unset-code"></a>

Pour afficher un exemple de code d'utilisation de la `$unset` commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

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

------