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

时间:2013-06-27 22:26:55

标签: mongodb database

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

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

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

我想使用aggregate函数在数据库中查询在给定日期范围内注册的用户列表,并将其作为列表返回。我想要一个看起来像这样的结果:

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

答案 0 :(得分:0)

尝试此查询:

db.users.aggregate([
  {
    $match: {
      signup_date: {
        $gte: date_begin_variable,
        $lt: date_end_variable
      }
    }
  },
  {
    $group: {
      _id: null,
      users: {
        $addToSet: "$user_id"
      }
    }
  }
])