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

如何在mongoDB中获取所有匹配的子数组对象,mongodb,mongodb-query,aggregation-framework,jenssegers-mongodb,Mongodb,Mongodb Query,Aggregation Framework,Jenssegers Mongodb,我有以下几个问题 [ { "_id": "5c87e621257db42508007f3b", "uuid": "8b03dba7-db96-40d0-8dd9-6a65efd6719a", "user_answers": [ { "profile_section_code": "MY_PROFILE", "profile_question_code": "STANDARD_EDUCATION", "sele

我有以下几个问题

[
  {
    "_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可以在这里看到:

我想获取所有带有“配置文件\u部分\u代码”的用户\u答案:“我的\u配置文件” 预期的结果应该是这样的

{ "_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的东西,但应该返回所有匹配数组。这是同样的

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

  • 是否只有使用投影才能做到这一点(我希望避免聚合,因为我必须在PHP中实现这一点)
  • 如果无法实现上述功能,那么如何使用聚合实现此功能

请让我知道我可以做些什么来修复此问题,使用
$filter
获得您的预期结果。此外,聚合管道似乎是过滤记录的唯一选项,或者需要在PHP代码级别完成

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

请参考,谢谢它的工作。还需要一个帮助-我可以知道我是否有一个沉重的文档,在这种情况下,通过PHP聚合或过滤会更好。我理解这是一个模糊的问题,因为有各种各样的因素。你认为呢?我想说,与使用PHP相比,聚合是更好的选择,因为聚合框架过滤来自MongoDB的记录,只将过滤后的记录发送到代码,而将所有数据发送到代码,这比聚合框架的成本更高。