MongoDB 项目 - return 数据仅当 $elemMatch 存在时

MongoDB Project - return data only if $elemMatch Exist

你好开发者,

我面临 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"
    }
  }
})

这里有一个 fiddle 相同的:https://mongoplayground.net/p/I99ZXBfXIut

我希望那些不匹配的记录 $elemMatch 根本不会被返回。

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

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

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

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

MongoPlayground