gpt4 book ai didi

mongodb - 如何在 mongoDB 中获取所有匹配的子数组对象

转载 作者:可可西里 更新时间:2023-11-01 10:08:39 27 4
gpt4 key购买 nike

我有以下 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 可以在这里看到:Link

我想使用“profile_section_code”获取所有 user_answers:“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" }

我在 Projection 中尝试了 $elemMatch,但它返回唯一的第一个匹配数组,我需要类似 $elemMatch 的东西,但应该返回所有匹配的数组。这是Fiddle同样

我也试过使用 this Answer但它没有用,因为它只返回第一个匹配的子数组

  • 有没有办法只使用投影来做到这一点(我想避免聚合,因为我必须在 PHP 中实现它)
  • 如果以上不可能,那么我如何使用聚合来实现它?

请让我知道我能做些什么来解决这个问题

最佳答案

使用 $filter 获得您期望的结果。此外,看起来聚合管道是过滤记录的唯一选项,或者需要在 PHP 代码级别完成。

[
{
'$addFields': {
'user_answers': {
'$filter': {
'input': '$user_answers',
'as': 'user_answer',
'cond': {
'$eq': [
'$$user_answer.profile_section_code', 'MY_PROFILE'
]
}
}
}
}
}
]

关于mongodb - 如何在 mongoDB 中获取所有匹配的子数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55129956/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com