in MongoDB, I have many documents in 2-level array as below:
{
_id:1,
"toPerson": [
[
{
"userid": "test1"
},
{
"userid": "test2"
}
],
[
{
"userid": "test10"
},
{
"userid": "test11"
}
]
]
}
.....
{
_id:99,
"toPerson": [
[
{
"userid": "test2"
},
{
"userid": "test3"
}
],
[
{
"userid": "test100"
},
{
"userid": "test101"
}
]
]
}
Question is how to query all documents that have userid say test2
?
Have tried:
col.find({'toPerson.userid':'test2'})
it's return nothing. also I have tried using aggregate
but found maybe it's not the right direction.
Anyone can help with this?
UPDATE 1 Just read this post
Retrieve only the queried element in an object array in MongoDB collection
but it's different
- Structure different: is
{field:[ [{ }], [{ }], .... ]}
, not{ field:[ {}, {} ] }
- I want to keep all returned documents structure untouched, $unwind(make toPerson to be 1-level array) or $$PRUNE(remove some fields) will change the structure returned.
UPDATE 2
What I want is to get following result in ONE statement:
col.find({ 'toPerson.0.userid':'test2' })
+ col.find({ 'toPerson.1.userid':'test2' })
+ ... ...
Is there any precise counterpart statement of above results combined together ?