带sum的MongoDB查询
我有一个简单的文档设置:带sum的MongoDB查询,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个简单的文档设置: { VG: "East", Artikellist: { Artikel1: "Sprite", Amount1: 1, Artikel2: "Fanta", Amount2: 3 } } 实际上,我只是想查询这些文档,以获得每个VG(或者城镇)的销售商品列表,这并不重要。此外,查询应汇总每个产品的金额,并将其返回给我 我知道我在用SQL语言思考,但事实就是这样 阿美的想法是这样的
{
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
希望你能帮我。感谢我糟糕的英语和我的badder Mongo技能。如果Artikel 1总是“精灵”而Artikel 2总是“芬达”,那么你可以试试这个:
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"}}})
$Sum等仅对同名字段有效。在数组或集合中应该有类似{“artikel”:“name”,“amount”:“20”}的对象。感谢您的帮助:)按预期工作:)