I die folgenden Datensätze:MongoDB Aggregation ohne Duplizierung
{ "_id" : 1, "c" : 120, "b" : [ { "f1" : 10 }, { "f1" : 10 } ] }
{ "_id" :2, "c" : 5, "b" : [ { "f1" : 10 }, { "f1" : 10 } ] }
ich brauche die Ausgabe auf diese Weise:
{ "_id" : 1, 'total':140}
{ "_id" :2, 'total':25 }
wo total = Summe des Wertes in 'C' mit der Summe der Werte in F1 für den gleichen Rekord.
Wenn ich entspannen, das Feld ‚b‘ es schafft zwei Dokumente mit derselben ID und somit Daten dupliziert und wenn ich es zusammenzufassen, ich bekomme:
db.test2.aggregate([
{'$unwind':'$b'},
{'$project':{'total':{'$add':['$c','$b.f1']}}},
{'$group':{'_id':'$_id', 'total':{'$sum':'$total'}}}
])
Ausgänge:
{ "_id" : 1, 'total':260}
{ "_id" :2, 'total':30 }
(nicht das, was ich wollte, wie es beim Abwickeln der Vervielfältigung durch 120 und 5 wieder insgesamt hinzugefügt)
so habe ich versucht:
db.test2.aggregate([
{'$unwind':'$b'},
{'$group':{'_id':'$_id', 'c':{'$push': '$c'},'f1':{'$sum':'$b.f1'}}},
{'$project':{'total':{'$add':[{'$arrayElemAt':['$c',0]},'$f1']}}}
])
Ausgänge:
{ "_id" : 1, 'total':140}
{ "_id" :2, 'total':25 }
(was ich wollte)
Gibt es eine andere Möglichkeit, dies zu erreichen?
einfach und elegant – Adarsh