MongoDB项目-仅在$ elemMatch存在时返回数据

时间:2019-02-26 11:19:38

标签: mongodb mongodb-query aggregation-framework projection

你好,开发人员,

我在MongoDB中遇到了这样的JSON数据

[{
    "id": "GLOBAL_EDUCATION",
    "general_name": "GLOBAL_EDUCATION",
    "display_name": "GLOBAL_EDUCATION",
    "profile_section_id": 0,
    "translated": [
      {
        "con_lang": "US-EN",
        "country_code": "US",
        "language_code": "EN",
        "text": "What is the highest level of education you have completed?",
        "hint": null
      },
      {
        "con_lang": "US-ES",
        "country_code": "US",
        "language_code": "ES",
        "text": "\u00bfCu\u00e1l es su nivel de educaci\u00f3n?",
        "hint": null
      }...
    {
     ....
    }
]

我正在使用以下查询来投影结果:

db.collection.find({

},
{
  _id: 0,
  id: 1,
  general_name: 1,
  translated: {
    $elemMatch: {
      con_lang: "US-EN"
    }
  }
})

这里有个小玩意儿:https://mongoplayground.net/p/I99ZXBfXIut

我希望完全不返回$elemMatch不匹配的记录。

在小提琴输出中,您可以看到第二个项目没有translated属性,在这种情况下,我根本不希望返回第二个项目。

Output from Fiddle

我使用Laravel作为后端技术,我可以使用PHP过滤掉那些记录,但是返回了很多记录,我认为使用PHP过滤不是最好的选择。

1 个答案:

答案 0 :(得分:2)

您需要在第一个参数中使用$elemMatch

db.collection.find({
  translated: {
    $elemMatch: {
      con_lang: "IT-EN"
    }
  }
})

MongoPlayground