我有这个集合
{
"_id" : ObjectId("55555555ffffff000010200a"),
"name" : "foo"
}
{
"_id" : ObjectId("55555555ffffff000010200e"),
"name" : "bar"
}
{
"_id" : ObjectId("55555555ffffff000010200f"),
"name" : "baz"
}
{
"_id" : ObjectId("55555555ffffff000010200b"),
"name" : "biz"
}
我想要一个数组ID
我做了这个
db.mycollection.find({}, {_id: 1})
并返回
{
"_id" : ObjectId("55555555ffffff000010200a")
}
{
"_id" : ObjectId("55555555ffffff000010200e")
}
{
"_id" : ObjectId("55555555ffffff000010200f")
}
{
"_id" : ObjectId("55555555ffffff000010200b")
}
{
"_id" : ObjectId("55555555ffffff000010200c")
}
{
"_id" : ObjectId("55555555ffffff0000103111")
}
我可以拥有一个阵列吗? ID [' 55555555ffffff0000103111'' 55555555ffffff0000103111'' 555555555ffffff0000103111'' 55555555ffffff0000103111']
答案 0 :(得分:8)
选项1:如果可以接受一个子文档数组,则只需将.toArray()附加到查找查询。
> db.test.find({}, {_id:1}).toArray()
[
{
"_id" : ObjectId("53270b12d111b9bf595f4270")
},
{
"_id" : ObjectId("53270b14d111b9bf595f4271")
},
{
"_id" : ObjectId("53270b16d111b9bf595f4272")
}
]
选项2:另一种选择是使用aggregation framework。
> db.test.aggregate([{$group:{_id:null, ids:{$push:"$_id"}}}, {$project:{_id:0, ids:1}}])
{
"result" : [
{
"ids" : [
ObjectId("53270b12d111b9bf595f4270"),
ObjectId("53270b14d111b9bf595f4271"),
ObjectId("53270b16d111b9bf595f4272")
]
}
],
"ok" : 1
}
选项3:或者您可以在shell中使用forEach,如下所示:
> var myIds = new Array()
> db.test.find({},{_id:1}).forEach(function(myDoc){myIds.push(myDoc._id.str)})
> myIds
[
"53270b12d111b9bf595f4270",
"53270b14d111b9bf595f4271",
"53270b16d111b9bf595f4272"
]
答案 1 :(得分:0)
使用distinct将单个列转换为数组:
db.mycollection.distinct('_id', function(err, list){
//list is an array of ObjectId
});