Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB聚合:将所有记录分组为一个结果_Mongodb_Database - Fatal编程技术网

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

MongoDB聚合:将所有记录分组为一个结果,mongodb,database,Mongodb,Database,在mongodb聚合调用中,如何使用$group操作符将管道中的所有文档分组到单个结果中 假设我有一组记录,看起来像这样: { user_id: 234, signup_date: 2013-06-27 } { users: [234, 235, 236] } db.users.aggregate([ { $match: { signup_date: { $gte: date_begin_variable,

在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
    }},
我想使用聚合函数查询数据库中在给定日期范围内注册的用户列表,并将其作为列表返回。我希望得到如下结果:

{
    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
    }},
我的查询如下所示:

{
    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()这样做似乎更干净。我错了吗?使用聚合或不使用聚合,实现我描述的内容的最佳方法是什么?

尝试以下查询:

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

_id:null是正确的,怎么“不工作”?(说“它不起作用”不是一个很好的问题,因为我们不知道你期望的输出是什么,以及你得到了什么)你目前得到的输出是什么?很抱歉,不够清晰。当我尝试_id:null时,我得到了一个空的用户id列表。如果这是正确的方法,我将返回并检查我的代码。请尝试以下方法:
users:{$addToSet:'$user_id'}
我找到了答案。早些时候,我在管道中添加了另一个
$group
操作,这样
user\u id
字段被重命名为
\u id
,因此当我执行
$addToSet:user\u id
时,它失败了,因为不再有名为
user\u id
的字段。我将该行更改为
$addToSet:\u id
,现在它可以正常工作了。感谢您提示
\u id:null
是正确的方法。这让我不再专注于这一部分,而是发现我的代码到底出了什么问题。