$zip - Amazon DocumentDB

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.

$zip

L'$zipopé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) Sitrue, le tableau de sortie aura la longueur du tableau d'entrée le plus long, les tableaux plus courts seront remplis null de valeurs. Sifalse, 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'useLongestLengthesttrue.

Exemple (MongoDB Shell)

L'exemple suivant montre comment utiliser l'$zipopé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

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