$reduce - Amazon DocumentDB

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

$reduce

O operador $reduce de agregação no Amazon DocumentDB é usado para aplicar uma função de dois argumentos cumulativamente aos elementos de uma matriz para reduzir a matriz a um único valor. Esse operador é particularmente útil para realizar cálculos ou transformações complexas em dados de matriz dentro do pipeline de agregação.

Parâmetros

  • input: A matriz a ser reduzida.

  • initialValue: O valor inicial a ser usado na operação de redução.

  • in: a expressão a ser avaliada em cada elemento da input matriz. Essa expressão deve retornar um valor que será usado na próxima iteração da redução.

Exemplo (MongoDB Shell)

O exemplo a seguir demonstra como usar o $reduce operador para calcular a soma de todos os elementos em uma matriz.

Crie documentos de amostra

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

Exemplo de consulta

db.orders.aggregate([ { $project: { total: { $reduce: { input: "$items", initialValue: 0, in: { $add: ["$$value", "$$this"] } } } } } ])

Saída

[ { "_id": 1, "total": 15 }, { "_id": 2, "total": 60 }, { "_id": 3, "total": 80 }, { "_id": 4, "total": 300 } ]

O $reduce operador itera sobre a items matriz, adicionando cada elemento ao initialValue de 0. O resultado é a soma de todos os elementos na matriz.

Exemplos de código

Para ver um exemplo de código para usar o $reduce comando, escolha a guia do idioma que você deseja usar:

Node.js

Aqui está um exemplo de uso do $reduce operador em um aplicativo 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

Aqui está um exemplo de uso do $reduce operador em um aplicativo 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()