我有一个简单的文档设置:
{
VG: "East",
Artikellist: {
Artikel1: "Sprite",
Amount1: 1,
Artikel2: "Fanta",
Amount2: 3
}
}
实际上我只是想查询这些文件,以获得每个VG或城镇中的销售清单列表,这无关紧要。此外,查询应该将每种产品的金额相加并将其交还给我。
我知道我在用SQL语言思考,但事实确实如此。
这个想法可能就在这里:
db.collection.aggregate([{
$group: {
_id: {
VG: "$VG",
Artikel1: "$Artikellist.Artikel1",
Artikel2: "$Artikellist.Artikel2",
$sum: "$Artikellist.Amount1",
$sum: "$Artikellist.Amount2"
},
}
}]);
这里最难的一点是,我有5个不同的VG值,并且它可能最多为5个Artikel,并且在一个列表中的数量。
所以希望你能在这里帮助我。因为我的英语不好以及我的书写蒙哥技能。
答案 0 :(得分:1)
如果Artikel1总是" Sprite"和Artikel2 - " Fanta",然后你可以尝试这个:
db.test.aggregate({$group : { _id : {VG : "$VG", Artikel1 : "$Artikellist.Artikel1", Artikel2 : "$Artikellist.Artikel2"}, Amount1 : {$sum : "$Artikellist.Amount1"},Amount2 : {$sum : "$Artikellist.Amount2"}}});
如果Artikel1和Artikel2的值有所不同,我建议改变文件的结构说:
{
VG: "East",
Artikellist: [
{ Artikel: "Sprite",
Amount: 1},
{ Artikel: "Fanta",
Amount: 3 }
]}
然后使用以下方法:
db.test.aggregate({$unwind : "$Artikellist"}, {$group : {_id : {VG : "$VG", Artikel : "$Artikellist.Artikel"}, Amount : {$sum : "$Artikellist.Amount"}}})