Здравствуйте.
Копаюсь в документации и никак не могу найти ответ на вроде как простой вопрос. Можно ли одним запросом (агрегацией) вытащить запись из коллекции с единственным вложенным элементом из списка?
В общем имеется запись, в поле data имеется список вложенных элементов с ключами для поиска и прочей информацией, таких элементов в поле может быть до 8000. Получить документ и обработать его в цикле, не лучший вариант. Хотелось бы получить документ с уже отсеченными лишними данными.
Пример документа:
{
"status" : NumberLong(1),
"data" : [
{
"subject" : {
"docNumber" : "0000 000000",
"fname" : "Васильев",
"mname" : "Васильевич",
"lname" : "Васильев"
},
"applications" : [
{
"number" : "ДОК-00022325",
"info" : "..."
}
],
"documents" : [
{
"number" : "ДОК-00022325",
"info" : "..."
}
]
}
]
}
Соответственно мне нужно получить только список всех documents которые соответствуют number ДОК-00022325 и получить из низ информацию из поля info (может быть несколько записей в коллекции, удовлетворяющих условия поиска), в любом формате. Работать с малым объемом данных проще, чем перебирать тысячи строк.
Возможно это реализовать на стороне MongoDB?
UPD:
Докопался до такого варианта. Но если есть еще предложения, буду раз прочитать.
aggregate(
[
{
$match: {
"data.documents.number": "ДОК-00022325"
}
},
{
$unwind: "$data"
},
{
$match: {
"data.documents.number": "ДОК-00022325"
}
}
]
);