Посмотрите, находится ли значение поля String в массиве - PullRequest
0 голосов
/ 31 января 2020

Я немного застрял с запросом в mongodb и думаю, что просто искал его неправильно. То, что я пытаюсь сделать, это запустить запрос, который возвращает все документы, где значение для указанного поля c находится где-то в массиве.

Это не $in, потому что это проверяет поле Array для указанного значения c. Я пытаюсь сделать наоборот. Я хочу сделать операцию над полем String и заглянуть внутрь массива. Я надеюсь, вы понимаете, что я имею в виду, но я думаю, что это станет ясно на примере.

Пример:

{
  hero: "The Flash",
  name: "Barry Allen",
  city: "Central City"
},
{
  hero: "Green Arrow",
  name: "Oliver Queen",
  city: "Star City"
},
{
  hero: "Batman",
  name: "Bruce Wayne",
  city: "Gotham City"
}

Итак, предположим, что я хочу, чтобы все герои были активны как в Готэм-сити , так и Центральном городе . Я хочу сделать запрос, где город в ["Gotham City", "Central City"].

Ответы [ 2 ]

2 голосов
/ 31 января 2020

$in должно подойти для вашего случая:

db.collection.find({ city: { $in: [ "Gotham City", "Central City" ] } })

Пример

Вы также можете использовать проекция , чтобы получить только имена героев:

db.collection.find({ city: { $in: [ "Gotham City", "Central City" ] } }, { hero: 1 })

Пример (2)

0 голосов
/ 31 января 2020

Это то, что вы ищете.

db.collection.find({ city: { $in: [ "Star City", "Gotham City"] }},{ hero: 1, _id: 0 });

Вы можете проверить это для лучшего понимания. https://mongoplayground.net/p/ME7m_eupWzp

РЕДАКТИРОВАТЬ

Хотя я чувствую, что вы искали решение ИЛИ, если вы искали условие И ( где должны быть возвращены только герои, которые были активны во всех указанных городах). Но вам необходимо соответствующим образом изменить свою схему.

db.collection.find({
  city: {
    $all: [
      "Star City",
      "Central City",
      "Gotham City"
    ]
  }
},
{
  hero: 1,
  _id: 0
})

https://mongoplayground.net/p/39lBJuDIQDH.

...