MongoDB聚合项目返回一个_id数组

时间:2017-10-06 05:51:01

标签: mongodb aggregate

我们知道如果我们想获得一个_id数组,我们可以这样做:

db.collections.distinct("_id");

我的问题是,如果我需要使用聚合做一个复杂的逻辑,我怎么能得到一个_id数组。 例如:

db.getCollection('users').aggregate({
        $match : {
            is_register_completed : { $ne : true}
        }
    }
    //other operator like $lookup, $group
    ,
     {
         $project : {_id:1}
    }
     )

我得到了

{
"_id" : "1",
"_id" : "2"
}

我想要的就像我们做的那样

{[1,2]}

更新 这就是我尝试使用$ group

db.getCollection('users').aggregate({
        $match : {
            is_register_completed : { $ne : true}
        }
    },
    {
        $group: {
        _id:null, all:{$addToSet: "$_id"}
        }
     }, {$project: {_id:0,all:1}}
     )

但我还是得到了

{
all : ["1","2"]
}

或者在获得

后我可以.map(function(el) { return el._id })
{
    "_id" : "1",
    "_id" : "2"
    }

,但地图是客户端转换,我认为它会影响性能。

1 个答案:

答案 0 :(得分:2)

修改 引自:How to return array of string with mongodb aggregation

  

无论你做什么,.aggregate()方法总是返回对象   那不能改变。

原文答案:
尝试聚合框架:

db.myCol.aggregate([
    {
        $group:{_id:null, array:{$push:"$_id"}}
    },
    {
        $project:{array:true,_id:false}
    }
])