MongoDB:按年份汇总结果

时间:2018-12-07 09:55:48

标签: mongodb

我正在尝试按年份汇总结果,但无法弄清楚为什么它不起作用。

数据看起来像...

{ 
    "_id" : ObjectId("5c0a3f9f97ed291ab951cd7c"), 
    "ArtNummer" : NumberInt(1), 
    "Artikelgruppe" : "Brote", 
    "ArtBezeichnung" : "Schweizer Brot", 
    "Datum" : ISODate("2016-09-30T22:00:00.000+0000"), 
    "KundeName" : "Hardt", 
    "KundenNr" : NumberInt(1), 
    "GelieferteMenge" : 9.0, 
    "Retoure" : 0.5, 
    "VerkaufteMenge" : 3.5
}

和我的查询代码:

use bbn;
db.getCollection("abverkauf").aggregate(
    [
        { 
            "$group" : {
                "_id" : {
                    "ArtNr" : "$ArtNr",
                    "year" : "$year"
                }
            }
        }, 
        { 
            "$project" : {
                "ArtNr" : "$_id.ArtNr",
                "year" : { "$year" : "$Datum"}
            }
        }
    ], 
    { 
        "allowDiskUse" : true
    }
);

和结果:

{ 
    "_id" : {

    }, 
    "year" : null
}

如何按年份或月份汇总结果?

1 个答案:

答案 0 :(得分:1)

您应该更改_id,因为当前您要引用两个不存在的字段:ArtNryear,而要提取日期的年份则应使用$year作为操作员,请尝试:

db.getCollection("abverkauf").aggregate([
        { 
            "$group" : {
                "_id" : {
                    "ArtNr" : "$ArtNummer",
                    "year" : { "$year" : "$Datum"}
                }
            }
        }, 
        { 
            "$project" : {
                "ArtNr" : "$_id.ArtNr",
                "year" : "$_id.year" 
            }
        }
])

打印:

{ "_id" : { "ArtNr" : 1, "year" : 2016 }, "ArtNr" : 1, "year" : 2016 }