Tengo una colección que se parece a esto.
{ balance: string symbol: string address: string }Quiero consultar esa colección usando una agregación de la siguiente manera:
input array addresses[]consultar colección donde colección.dirección contenida en la dirección proporcionada Array y SUM todos los saldos agrupados por símbolo.
La salida deseada debería verse así:
[ {symbol: xy, balance: summedBalanceForThisSymbol}, {symbol: yz, balance: summedBalanceForThisSymbol}, ]Soy bastante nuevo en mongoDB, esto es lo que tengo que no funciona en absoluto.
const pipe = [ { match: [ { address: { $in: addresses } //addresses is an array of string values } ] }, { group: { objectId: "$symbol", balance: { $sum: "$balance" } } } ]Tengo que usar objectId en lugar de _id porque el SDK que estoy usando requiere hacerlo. También necesito que los valores de balance de cadena se conviertan en un número (supongo que el doble) antes de resumir.
Estás muy cerca, solo tienes algunos errores menores de sintaxis, así es como debes hacerlo:
(Una cosa que se debe mencionar es que esto requiere que el balance sea una cadena de números válida; de lo contrario, la canalización arrojará un error)
db.collection.aggregate([ { $match: { address: { $in: addresses } } }, { $group: { _id: "$symbol", sum: { $sum: { "$toInt": "$balance" } } } } ])