mongodb自定义字段与其他查询

时间:2014-02-27 17:34:01

标签: mongodb

我有一个这种结构的集合:

{
 _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;}
)

1 个答案:

答案 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值相匹配的值。