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

按内部数组分组的MongoDB聚合计数

巩子实
2023-03-14

我使用的是MongoDB 3.2。

在这个问题上遇到问题。。。

(为类似SQL的语法提前道歉,我只是从SQL学习Mongo)

我需要找到文件的数量

"audit_event_type_id" : 1
shop2.date" BETWEEN "2014-10-01" AND "2015-09-01"

按类别分组

shop2.facility_name
MONTH(shop2.date)
YEAR(shop2.date)

订购人

count DESC

有没有办法将查询中的字符串转换为日期?我知道我在存储shop2。当日期应为ISODate时,将其作为字符串。如果不是,我们就假设它是一个ISODate。

下面是一个文档示例:

   {
        "_id" : ObjectId("56b38f31967a337c432119cb"),
        "audit_event_id" : 12382306,
        "audit_event_type_id" : 2,
        "group_id" : 3333489,
        "applicant_id" : 3428508,
        "service_credit_id" : 3804844,
        "page_hit_id" : 43870954,
        "shop1" : {
            "facility_id" : 28,
            "facility_name" : "Fake1",
            "date" : "2014-08-13",
            "time" : "07:00",
            "expedite" : false,
            "collect_biometrics" : false,
            "block_id" : 364814,
            "appointment_category" : "Renewal"
        },
        "shop2" : {
            "facility_id" : 29,
            "facility_name" : "Fake2",
            "date" : "2014-08-07",
            "time" : "07:00",
            "expedite" : false,
            "block_id" : 373614,
            "appointment_category" : "Biometrics"
        },
        "created_at" : "2014-07-30 00:44:36",
        "updated_at" : "2014-07-30 00:44:36",
        "user_id" : 3242890,
        "payment_id" : null,
        "mission_id" : 24,
        "affected_user_id" : null
    }

任何帮助都将不胜感激。谢谢

我已经更新了所有的shop1。日期

   {
        "_id" : ObjectId("56b38f31967a337c432119cb"),
        "audit_event_id" : 12382306,
        "audit_event_type_id" : 2,
        "group_id" : 3333489,
        "applicant_id" : 3428508,
        "service_credit_id" : 3804844,
        "page_hit_id" : 43870954,
        "shop1" : {
            "facility_id" : 28,
            "facility_name" : "Fake1",
            "date" : ISODate("2014-08-13T00:00:00Z"),
            "time" : "07:00",
            "expedite" : false,
            "collect_biometrics" : false,
            "block_id" : 364814,
            "appointment_category" : "Renewal"
        },
        "shop2" : {
            "facility_id" : 29,
            "facility_name" : "Fake2",
            "date" : ISODate("2014-08-07T00:00:00Z"),
            "time" : "07:00",
            "expedite" : false,
            "block_id" : 373614,
            "appointment_category" : "Biometrics"
        },
        "created_at" : "2014-07-30 00:44:36",
        "updated_at" : "2014-07-30 00:44:36",
        "user_id" : 3242890,
        "payment_id" : null,
        "mission_id" : 24,
        "affected_user_id" : null
    }

共有1个答案

史承福
2023-03-14

您可以使用mongodb中的聚合框架来实现以下目的:

db.Collection.aggregate([
{ $match: { 
    audit_event_type_id: 1,
    "shop2.date": { $gte: ISODate("2014-10-01T00:00:00.000Z"), $lt: ISODate("2015-09-01T00:00:00.000Z") } } 
},
{ $group : {
        _id : { "shop2.facility_name": "$shop2.facility_name", month: { $month: "$shop2.date" }, year: { $year: "$shop2.date" } },
        count: { $sum: 1 } }
},
{ $sort : { count: -1 } }
])
 类似资料:
  • {应用程序:“ABC”,日期:time.now,状态:“1”user_id:[id1,id2,id4]} {应用程序:“ABC”,日期:time.listerment,状态:“1”,user_id:[id1,id3,id5]} {应用程序:“ABC”,日期:time.ystayday-1,状态:“1”,user_id:[id1,id3,id5]} 我目前正在使用聚合框架并计算MongoDB之外的I

  • 我正在查找与url匹配但返回自定义对象的记录。 我有这个模型。。 我想查询该模型并匹配url,但返回如下响应: 我需要能够通过将记录的ip与过程中的变量进行比较,动态计算反应的ip是否为真。 一次尝试是 但我似乎无法集中IP并查看我的变量IP是否在该数组中。 谢谢你的帮助。我第一次问!

  • 本文向大家介绍MongoDB聚合分组多个结果,包括了MongoDB聚合分组多个结果的使用技巧和注意事项,需要的朋友参考一下 要聚合多个结果,请在MongoDB中使用$group。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是汇总组多个结果的查询- 这将产生以下输出-

  • 我有以下计数查询: 有没有办法使用single aggregation()和嵌套的$group来实现这一点mongodb@3.2? 我知道这是mapReduce()的一个经典用例,但我在这里没有选择,因为$group by parameters()是一个动态生成的属性,因此聚合阶段的构建也是动态的。 预期输出与两个计数查询的结果相同。-

  • 我的mongoDB集合中有一千多个文档,其中每个文档都表示这样一首歌的数据: 现在,在聚合管道的帮助下,我想按以下方式对我的集合进行分组。到目前为止,我可以对1个阶段进行分组,但我很难将整个根文档进行到底,并进行嵌套分组。 列出所有流派-

  • 假设我有一个MongoDB集合,其中包含以下信息: 我想计算按州分组的订单总价的总和,其中项目为“苹果”,颜色为“红色”。我的问题是: 但是,我希望能够将我的结果cust\u id包含在\u id中,它是一个数组/映射/一些结构,其中包含构成我的合计的所有客户id的列表。因此,我希望我的输出包含 是否有办法处理此mongo聚合/查询?或者是一种更好的方式来构造此查询,以便我可以按州分组计算红苹果的