У меня есть следующий JSON
[
{
"_id": "5c87e621257db42508007f3b",
"uuid": "8b03dba7-db96-40d0-8dd9-6a65efd6719a",
"user_answers": [
{
"profile_section_code": "MY_PROFILE",
"profile_question_code": "STANDARD_EDUCATION",
"selected_answer": [
"2"
]
},
{
"profile_section_code": "MY_PROFILE",
"profile_question_code": "ETHNICITY",
"selected_answer": [
"2"
]
},
{
"profile_section_code": "FAMILY",
"profile_question_code": "STANDARD_HHI_US",
"selected_answer": [
"11"
]
},
{
"profile_section_code": "FAMILY",
"profile_question_code": "STANDARD_HH_ASSETS",
"selected_answer": [
"5"
]
},
{
"profile_section_code": "AUTOMOTIVE",
"profile_question_code": "STANDARD_AUTO_DECISION_MAKER",
"selected_answer": [
"1"
]
}
],
"created_at": "2019-03-12T17:02:25.000Z"
}
]
Полный JSON можно увидеть здесь: Связь
Я хочу получить все user_answers с помощью "profile_section_code": "MY_PROFILE" Ожидаемый результат должен быть таким
{ "_id": "5c87e621257db42508007f3b", "uuid": "8b03dba7-db96-40d0-8dd9-6a65efd6719a", "user_answers": [ { "profile_section_code": "MY_PROFILE", "profile_question_code": "STANDARD_EDUCATION", "selected_answer": [ "2" ] }, { "profile_section_code": "MY_PROFILE", "profile_question_code": "ETHNICITY", "selected_answer": [ "2" ] }],"created_at": "2019-03-12T17:02:25.000Z" }
Я попробовал $elemMatch в Projection, но он возвращает единственный массив совпадений 1, мне нужно что-то вроде $elemMatch, но он должен возвращать весь массив совпадений. вот Скрипка для того же
Я также пытался использовать этот ответ, но это не сработало, так как возвращал только первый соответствующий подмассив.
Пожалуйста, дайте мне знать, что я могу сделать, чтобы исправить это

Используйте $filter, чтобы получить ожидаемый результат. Кроме того, похоже, что конвейер агрегации — единственный вариант фильтрации записей, или это необходимо сделать на уровне кода PHP.
[
{
'$addFields': {
'user_answers': {
'$filter': {
'input': '$user_answers',
'as': 'user_answer',
'cond': {
'$eq': [
'$$user_answer.profile_section_code', 'MY_PROFILE'
]
}
}
}
}
}
]
Спасибо. Это сработало. Нужна еще одна помощь - могу ли я узнать, есть ли у меня тяжелый документ, что было бы лучше в этом случае Агрегация или Фильтрация через PHP. Я понимаю, что это неопределенный вопрос из-за различных факторов, но что вы думаете?
Я бы сказал, что агрегация — лучший вариант по сравнению с выполнением этого в PHP, потому что инфраструктура агрегации фильтрует записи из MongoDB и отправляет в код только отфильтрованные записи, а наоборот — все данные отправляются в код, и это дороже, чем инфраструктура агрегации. .
См. stackoverflow.com/questions/3985214/…