$filter - Amazon DocumentDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

$filter

El $filter operador de Amazon DocumentDB se utiliza para aplicar una expresión de filtro a cada elemento de una matriz y devolver una matriz que contiene solo los elementos que cumplen la condición especificada. Este operador resulta útil cuando necesita realizar operaciones de filtrado complejas en los campos matriciales de sus documentos.

Parámetros

  • input: El campo de matriz que se va a filtrar.

  • as: el nombre de la variable que se utilizará para cada elemento de la input matriz dentro de la cond expresión.

  • cond: La expresión booleana que determina si un elemento determinado debe incluirse en la matriz de salida.

Ejemplo (MongoDB Shell)

En el siguiente ejemplo, se muestra cómo utilizar el $filter operador para proyectar el cliente de cada pedido y crear un nuevo campo matricial paiItems que contenga únicamente los artículos de la matriz items cuyo precio sea superior a 15. Básicamente, filtra los artículos de cada pedido para incluir solo los productos que cuestan más de 15€.

Crea documentos de muestra

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

Ejemplo de consulta

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

Salida

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

Ejemplos de código

Para ver un ejemplo de código para usar el $filter comando, elija la pestaña del idioma que desee usar:

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