【问题标题】:MongoDB: aggregate results by yearMongoDB:按年汇总结果
【发布时间】:2018-12-07 09:55:47
【问题描述】:

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

数据看起来像......

{ 
    "_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
}

如何按年或月汇总结果?

【问题讨论】:

    标签: mongodb


    【解决方案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 }
    

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 2021-12-08
      • 2015-06-27
      相关资源
      最近更新 更多