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

$filter

L'$filteropé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'condexpression.

  • cond: expression booléenne qui détermine si un élément donné doit être inclus dans le tableau de sortie.

Exemple (MongoDB Shell)

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

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