在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
但它有所不同
{field:[ [{ }], [{ }], .... ]}
,而不是{ field:[ {}, {} ] }
更新2
我想要的是在一个声明中获得以下结果:
col.find({ 'toPerson.0.userid':'test2' })
+ col.find({ 'toPerson.1.userid':'test2' })
+ ... ...
上述结果的确切对应声明是否合并?
答案 0 :(得分:3)
您可以使用两个$elemMatch
级别来查询这样的嵌套数组:
db.test.find({toPerson: {$elemMatch: {$elemMatch: {userid: 'test2'}}}})
外部$elemMatch
表示匹配数组元素toPerson
,其中值通过匹配$elemMatch
的元素的内部数组{userid: 'test'}
测试。