我们知道如果我们想获得一个_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"
}
,但地图是客户端转换,我认为它会影响性能。
答案 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}
}
])