в MongoDB, у меня есть много документов в массиве 2 уровня, как показано ниже:запроса массив 2 уровня в MongoDB
{
_id:1,
"toPerson": [
[
{
"userid": "test1"
},
{
"userid": "test2"
}
],
[
{
"userid": "test10"
},
{
"userid": "test11"
}
]
]
}
.....
{
_id:99,
"toPerson": [
[
{
"userid": "test2"
},
{
"userid": "test3"
}
],
[
{
"userid": "test100"
},
{
"userid": "test101"
}
]
]
}
Вопрос в том, как запросить все документы, которые говорят test2
идентификатор пользователь?
Пытались:
col.find({'toPerson.userid':'test2'})
это не возвращают ничего. также я пробовал использовать aggregate
, но нашел, возможно, это не правильное направление.
Любой может помочь с этим?
UPDATE 1 Просто прочитал этот пост
Retrieve only the queried element in an object array in MongoDB collection
но отличается
- Структура ди fferent: is
{field:[ [{ }], [{ }], .... ]}
, а не{ field:[ {}, {} ] }
- Я хочу, чтобы все возвращенные структуры документов были нетронутыми, $ unwind (make toPerson будет 1-уровневым массивом) или $$ PRUNE (удалить некоторые поля) изменит возвращаемую структуру.
UPDATE 2
То, что я хочу, чтобы получить следующий результат в одной инструкции:
col.find({ 'toPerson.0.userid':'test2' }) + col.find({ 'toPerson.1.userid':'test2' }) + ... ...
Есть ли точная копия заявление выше результатов объединены вместе?
Ну, у вас есть запрос, но если вы ожидаете вернуть только те элементы, которые соответствуют массиву, то '.aggregate()' является вашим единственным направлением. Посмотрите документацию для [positional '$' operator] (http://docs.mongodb.org/manual/reference/operator/projection/positional/). Вложенные массивы не будут работать, поскольку только позиция «первый» или «внешний» массив соответствует возвращенной позиции. –
Возможный дубликат [Получить только запрошенный элемент в массиве объектов в коллекции MongoDB] (http: // stackoverflow.com/questions/3985214/retrieve-only-the-queried-element-in-an-object-array-in-mongodb-collection) –
@BlakesSeven Я попробовал снова, запрос не работает, потому что это '{поле: [[{}], [{}], ....]} 'структура, а не' {поле: [{}, {}]} ',' $ elemMatch' также не решает. –