MongoDB Project - возвращать данные, только если существует $ elemMatch - PullRequest
0 голосов
/ 26 февраля 2019

Здравствуйте, хорошие разработчики,

Я сталкиваюсь с ситуацией в 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 в качестве Backend Tech, я могу отфильтровать эти записи с помощью PHP, но возвращено много записей, и я думаю, что фильтрация с использованием PHP не лучший вариант.

1 Ответ

0 голосов
/ 26 февраля 2019

Вам необходимо использовать $elemMatch в первом параметре

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

MongoPlayground

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...