当前位置: 首页 > 知识库问答 >
问题:

MongoDB:按年份汇总结果

屠钊
2023-03-14

我试图按年度汇总我的结果,但我不明白为什么它不起作用。

数据看起来像...

{ 
    "_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个答案

鲁博雅
2023-03-14

您应该更改id,因为当前引用的是两个不存在的字段:ArtNr和year。要从应该使用$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 }

 类似资料:
  • 问题内容: 我需要从YEAR除以数量的总和中找出MAX VALUE(需要编写Oracle查询)。 例如 我的输出应该是这样的: 。我只需要考虑过去3年汇总的AVG并分配最大值 任何帮助将不胜感激。 问题答案:

  • 问题内容: 我每年进行一次嵌套聚合,然后每年在Elasticsearch中进行每周一次嵌套聚合。years年有53周,但是ElasticSearch的结果给出的是year年的最后一周key =“ 1”而不是“ 53”。如何让ElasticSearch在上周返回53而不是1? 这是我的查询: 结果(删除的数据在中间): 2008年是a年,最后一个星期有“ key_as_string”:“ 1”。我希

  • 有没有一个简单的方法可以做到这一点?

  • 问题内容: 我需要编写一个查询,该查询从表中返回汇总和非汇总数据。 下面的示例应有助于阐明我要执行的操作。我有以下(简化)表: 为了便于讨论,假设每个学生都属于一个课程组。我想编写一个查询,该查询将返回如下结果集: student.name,student.weight,weight_apgaw,weight_apgh 在哪里: weight_apgaw: 是单个学生的体重,表示为他/她所属课程组

  • 问题内容: 我建立了一个查询,使年初至今的净销售额回升到最近完成的月份。查询联合来自发票和贷项凭证的总计。效果很好。我在另一个工具中使用查询,该工具按卡代码进行求和,并允许我进行有趣的操作等。这是该查询: 现在,我想修改查询以返回每年客户净额的前n个,例如20%。这是我遇到麻烦的地方。我正在使用SQL Server,所以首先我想我会尝试使用row_number()over(partition ..

  • 我有以下数据框: 我需要按年和月分组数据。即:按2013年1月、2013年2月、2013年3月等分组...我将使用新分组的数据来创建一个显示每年/每月abc vs xyz的图表。 我尝试过groupby和sum的各种组合,但似乎没有任何效果。 谢谢你的帮助。