我有一个这种结构的集合:
{
_id : <number>,
param1 : <number>,
param2 : <number>,
param3 : <number>,
.
.
.
}
我想获取适合条件的文档,并包含一个额外的数组参数,其中包含那些文件的_id值,这些文件在“param1”中具有与实际行相同的值。所以我得到这样的结果:
{
_id : <number>,
param1 : <number>,
param2 : <number>,
param3 : <number>,
.
.
.
extraParameter: [{_id: 1}, {_id: 5}, {_id: 7}, {_id: 10} ...]
}
我不确定我是否可以这样做,但希望你能帮助我找到最佳解决方案。
谢谢!
编辑:
我已经为此做了以下查询,但是文档说不要触摸地图中的数据库,但我不知道是否有其他方式...或者是否有更简单的方法?:< / p>
db.collection.find().forEach(function(row){
row.nexts = db.collection.find({param1: row.param1}).map(function(nextElement){
return {_id: nextElement._id};});
return row;}
)
答案 0 :(得分:0)
您可以使用聚合执行类似操作:
db.coll.aggregate([{$group: {_id: "$param1", extras: {$push: "$_id"}}}])
我插入了这个:
> db.coll.insert({'_id': 1, param1: 'a', b: 'b'})
> db.coll.insert({'_id': 2, param1: 'a', b: 'c'})
> db.coll.insert({'_id': 3, param1: 'a', b: 'd'})
> db.coll.insert({'_id': 4, param1: 'b', b: 'e'})
这导致了这一点。
{
"result" : [
{
"_id" : "b",
"extras" : [
4
]
},
{
"_id" : "a",
"extras" : [
1,
2,
3
]
}
],
"ok" : 1
}
然后你可以迭代每个文档,只需在数组中查找_id与你的param1值相匹配的值。