MongoDB - 如何按日期分组并计算数组中的元素

阿杰·库马尔

这是我的示例文档:

{
    "_id" : ObjectId("5eac6572fe57d55a258e645a"),
    "createdAt" : ISODate("2020-05-01T18:07:37.568Z"),
    "user" : ObjectId("5e6dda081c456d3670ba5816"),
    "question" : [
        {
            "round" : 1,
            "attempt" : 1,
            "right" : 0,
            "wrong" : 1,
            "time" : ISODate("2020-05-01T18:07:46.900Z"),
            "_id" : ObjectId("5eac6572fe57d55a258e645b"),
            "questions" : ObjectId("5e81735b286698630dba2be5")
        }
    ],
    "__v" : 0
}

我想按 createdAt 分组并计算该日期的问题总数。我试过这个,但没有运气

MyModel.aggregate([
            {  $match: { user: req.user._id } },
            {
                $group: {
                    _id: {
                        createdAt: "$createdAt",
                        //question: "$question",
                        //count: {$count: "$question"} // Giving me an error that $count not found
                    }
                },
            }
        ], function(err, docs) {
            if (err) {
                console.log(err);
            } else {
                res.json(docs);
            }
        });

任何帮助将不胜感激。提前致谢!

whoami - fakeFaceTrueSoul

尝试以下聚合查询:

db.collection.aggregate([
  /** add a new field to each doc with count on `question` array */
  { $addFields: { questionCount: { $size: "$question" } }
  },
  /** group all docs & sum-up question count */
  {
    $group: {
      _id: { createdAt: { $dateToString: { format: "%Y-%m-%d", date: "$createdAt" } } },
      questionCount: { $sum: "$questionCount" }
    }
  }
])

测试: mongoplayground

注意:您当然可以通过数组$unwind之后作为第二阶段使用然后通过计算 no.of docs来以其他方式执行此操作,如果即使之后它仍然很大,也可能会爆炸您的集合,所以这种方式可能会更好。$matchquestion$group$unwind$match

更新:正如@Thee Sritabtim 所建议的:

db.collection.aggregate([
      /** group all docs & sum-up question count using `$size` on array */
      {
        $group: {
          _id: { createdAt: { $dateToString: { format: "%Y-%m-%d", date: "$createdAt" } } },
          questionCount: { $sum: { $size: "$question" } }
        }
      }
    ])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在mongodb中按数组元素分组

在Mongodb中按数组元素分组

如何在MongoDB中计算数组重复元素

如何在mongodb中计算数组中的对象?

如何在MongoDB中按季度对日期进行分组

如何在Spring Data MongoDB中使用多个聚合正确地计算数组元素?

MongoDB如何使用Java驱动程序计算数组元素

MongoDB聚合:计算数组元素或距离之间的差异

计算数组中的元素数量并为mongodb中集合的每个文档求和?

在mongoose / mongodb中按日期分组?

MongoDB按数组字段中的值分组

MongoDB和Mongo图表:如何计算数组中前一项的增量?

计算数组中的总和并对 mongodb 进行排序

MongoDB计算数组中的不同项目

Mongodb 计算数组中项目的组合

在mongoDB中按日期分组,同时计算其他字段

MongoDb 按日期分组并分页

按日期在mongodb中分组?

MongoDB查询按日期分组

获取按 $dayOfWeek 分组的每个用户的日期数组并在 MongoDb 中对其进行操作

mongodb按数组中的条件元素排序

基于数组元素 mongoDB 的分组

如何使用Java在MongoDB中按字段对文档分组和计算计数

如何从MongoDB中按日期按聚合组从数组中获取最后两个值?

如何使用Spring从MongoDB中检索数据-按每天的最新日期时间分组?

如何在MongoDB中按日期分组获取数据百分比

如何在 MongoDB 中按日期范围 -weekly- 获取然后分组?

在mongoDB中按属性分组

如何计算集合中数组内真正布尔值的数量并按 MongoDB 中的作业分组?