Wir haben eine Gesamtabfrage, die nur wenige Unterdokumente projiziert. Wir wollten einige arithmetische Operationen wie Summe und Produkt auf diese projizierten Werte anwenden.MongoDB-Aggregat für arithmetische Operationen - Filialdokument
Aggregationsanfrage -
Item.aggregate([
{ $unwind: '$dummy'},
{ $match: {'dummy.storage': {$gt: 0}} },
{ $group: {_id: '$_id',
dummy: {$push: '$dummy'},
original_y: { $first: "$original_y" },
new_y: { $first: "$new_y" },
}},
{$project:{
original_y: 1, new_y: 1,
tallyAmount: {$sum: ["$new_y","$original_y"] }
}
},
]
)
.exec(function(err, results){
if(err)
{
console.log("Error : " + err);
return res.json ({error: "Error"});
}
else if(!(results) || results == null || results.length == 0)
{
console.log("No Results Found");
return res.json ({error: "No Results Today"});
}else{
res.send(results);
}
});
dies ein Fehler gibt Angabe invalid operator '$sum'
Was sollten wir die Summe von original_y
und new_y
im $project
erhalten tun?
EDIT
Dokumente:
{
id:1,
original_y: 200,
new_y: 140,
dummy: [
{id:1, storage:2, cost: 10},
{id:2, storage:0, cost: 20},
{id:3, storage:5, cost: 30},
]
}
OUTPUT ERWARTET:
{
id:1,
original_y: 200,
new_y: 140,
dummy: [
{id:1, storage:2, cost: 10, tallyAmount: 34},
{id:3, storage:5, cost: 30, tallyAmount: 11.33},
]
}
wo tallyAmount = (original_y + new_y)/cost
FEHLER: kann nicht einen Ausdruck für einen Teil hinzufügen Feld von Dummy, weil es bereits einen Ausdruck gibt, der für das ganze Feld gilt
@chridam Habe das Dokument und die erwartete Ausgabe aktualisiert. –
Danke für das Update, ich habe meine Antwort unten aktualisiert, um die Änderungen zu übernehmen. – chridam