带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”}的对象。感谢您的帮助:)按预期工作:)