Для этой задачи вам надо использовать проекцию. Их в монге несколько видов:
- Используется в запросах find, findOne, findOneAndDelete, findOneAndReplace и findOneAndUpdate
- Используется для фильтрации элементов массива
- Используется как отдельная стадия аггрегации
1 тип аггрегации позволяет только скрыть лишние элементы из ответа. Если воспользоваться этим типом, то запрос будет выглядеть вот так:
db.subjects.find(
{"ФизМат.Педагогические науки.B009": {$exists: true}}, // Из всех документов (если у вас их несколько, а не один огромный документ), выбрать те, у которых существует поле "ФизМат.Педагогические науки.B009"
{
_id: 1, // У найденного документа вернуть только поле _id
"ФизМат.Педагогические науки.B009": 1 // и поле "ФизМат.Педагогические науки.B009"
}
)
Ответ на такой запрос:
{
"_id": ObjectId("600fa6f3101fa920a8575e6f"),
"ФизМат": {
"Педагогические науки": {
"B009": {
"code": "B009",
"name": "Подготовка учителей математики",
"max": "140",
"min": " 107",
"minWithQuota": " 95"
}
}
}
}
т.е. будут скрыты все поля, кроме
_id
и
ФизМат.Педагогические науки.B009
, никаких дополнительных преобразований над документом проводиться не будет.
2 тип используется что бы из массива выбрать только первое подходящее значение, но у вас предметы оформлены не в виде массива документов, поэтому этот тип пропустим.
3 тип - как стадия аггрегации. Аггрегация в монге - довольно мощный инструмент, который позволяет группировать результаты, преобразовывать их, делать многоуровневый поиск и т.п.
В данном случае сам запрос будет выглядеть совершенно
по другому:
db.subjects.aggregate(
[
{
$match: { // Эта стадия ищет документы, подходящие под условие
"ФизМат.Педагогические науки.B009": {$exists: true} // В документе есть поле "ФизМат.Педагогические науки.B009"
}
},
{
$project: { // Стадия проекции
_id: 1, // Вернуть id документа
value: "$ФизМат.Педагогические науки.B009" // Вернуть embedded документ в поле value
}
},
])
Ответ в таком случае будет выглядеть вот так:
{
"_id": ObjectId("600fa6f3101fa920a8575e6f"),
"value": {
"code": "B009",
"name": "Подготовка учителей математики",
"max": "140",
"min": " 107",
"minWithQuota": " 95"
}
}