查询mongodb

时间:2015-10-01 14:29:11

标签: mongodb

在MongoDB中,我在2级数组中有很多文档,如下所示:

{
_id:1,
"toPerson": [
        [
            {
                "userid": "test1"
            },
            {
                "userid": "test2"
            }
        ],
        [
            {
                "userid": "test10"
            },
            {
                "userid": "test11"
            }
        ]
  ]
}
.....
{
_id:99,
"toPerson": [
        [
            {
                "userid": "test2"
            },
            {
                "userid": "test3"
            }
        ],
        [
            {
                "userid": "test100"
            },
            {
                "userid": "test101"
            }
        ]
  ]
}

问题是如何查询具有用户ID test2的所有文档?

尝试过:

col.find({'toPerson.userid':'test2'})

它返回没有。我也试过使用aggregate,但发现这可能不是正确的方向。

任何人都可以帮忙解决这个问题吗?


更新1 刚看完这篇文章

  

Retrieve only the queried element in an object array in MongoDB collection

但它有所不同

  1. 结构不同:{field:[ [{ }], [{ }], .... ]},而不是{ field:[ {}, {} ] }
  2. 我想保持所有返回的文档结构不变,$ unwind(使toPerson成为1级数组)或$$ PRUNE(删除一些字段)将改变返回的结构。

  3. 更新2

    我想要的是在一个声明中获得以下结果:

    col.find({ 'toPerson.0.userid':'test2' }) + col.find({ 'toPerson.1.userid':'test2' }) + ... ...

    上述结果的确切对应声明是否合并

1 个答案:

答案 0 :(得分:3)

您可以使用两个$elemMatch级别来查询这样的嵌套数组:

db.test.find({toPerson: {$elemMatch: {$elemMatch: {userid: 'test2'}}}})

外部$elemMatch表示匹配数组元素toPerson,其中值通过匹配$elemMatch的元素的内部数组{userid: 'test'}测试。