$objectToArray - 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.

$objectToArray

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)

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

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