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

MongoDB聚合:将所有记录分组为一个结果

奚正谊
2023-03-14

在mongodb聚合调用中,如何使用$group操作符将管道中的所有文档分组为一个结果?

假设我有一组记录,看起来像这样:

{
    user_id: 234,
    signup_date: 2013-06-27
}

我想使用聚合函数在数据库中查询在给定日期范围内注册的用户列表,并将其作为列表返回。我想要一个如下的结果:

{
    users: [234, 235, 236]
}

我的查询如下所示:

db.users.aggregate([

    { $match: {
        signup_date: {
            $gte: date_begin_variable,
            $lt: date_end_variable
    }},

到目前为止,一切顺利。我现在有一部分记录,所有记录的注册日期都在所需的范围内。但这就是我遇到麻烦的地方。现在,我想将所有这些记录分组到一个包含所有ID列表的结果中。但我不知道如何使用$group实现这一点。

    { $group: {
        _id: null
        users: { $addToSet: user_id }
    }}

])

当我尝试_id:null时,我得到了一个空的用户id列表。

我可以使用find()返回所需的记录集,然后手动将ID处理到列表中,但使用aggregate()似乎更干净。我错了吗?要完成我所描述的任务,最好的方法是什么,使用聚合还是不使用聚合?

共有1个答案

柴凌
2023-03-14

尝试以下查询:

db.users.aggregate([
  {
    $match: {
      signup_date: {
        $gte: date_begin_variable,
        $lt: date_end_variable
      }
    }
  },
  {
    $group: {
      _id: null,
      users: {
        $addToSet: "$user_id"
      }
    }
  }
])
 类似资料:
  • 本文向大家介绍MongoDB聚合分组多个结果,包括了MongoDB聚合分组多个结果的使用技巧和注意事项,需要的朋友参考一下 要聚合多个结果,请在MongoDB中使用$group。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是汇总组多个结果的查询- 这将产生以下输出-

  • 本文向大家介绍MongoDB将带有数组的记录转换为新集合中的多个记录,包括了MongoDB将带有数组的记录转换为新集合中的多个记录的使用技巧和注意事项,需要的朋友参考一下 为此,可以将$out与aggregate()和$undend一起使用。让我们用文档创建一个集合 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是将具有数组的一个记录转换为新集合中的多个记录的查询- 这

  • 本文向大家介绍MongoDB聚合分组取第一条记录的案例与实现方法,包括了MongoDB聚合分组取第一条记录的案例与实现方法的使用技巧和注意事项,需要的朋友参考一下 前言 今天开发同学向我们提了一个紧急的需求,从集合mt_resources_access_log中,根据字段refererDomain分组,取分组中最近一笔插入的数据,然后将这些符合条件的数据导入到集合mt_resources_acce

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

  • 我用mongoTemplate实现了一个投影,结果如下: 为此,我这样做了: 现在我真正想要的是将所有行分组在一个字段中,因为它是同一个字段,为了最终每个(键,值)都有一个,所有值都是不同的,类似这样: 对于我的上下文,我需要使用蒙古操作(mongoTemboard),我尝试了很多方法,但我没有得到想要的结果,有人能帮我吗?

  • 我第一次使用mongo。我正在尝试使用下面的查询聚合集合中的一些文档。相反,查询返回一个具有键“result”的对象,该键包含一个包含符合$match的所有文档的数组。 下面是查询。 以下是集合中的示例文档: 我正在尝试将所有内容按uid进行分组,每个组的总和。。。实现这一目标的正确方法是什么?