Как сопоставить элемент массива? Агрегация MongoDB

Мне нужно проверить все документы, конкретное поле которых содержится в массиве.

Например, у меня есть массив

arr = ['a', 'b', 'a']

Я хочу сопоставить все документы, в которых поле my_letter равно a or b.

У меня есть документы:

[
  {
    _id: ObjectID(),
    my_letter:'d'
  },
  {
    _id: ObjectID(),
    my_letter:'a'
  },
  {
    _id: ObjectID(),
    my_letter:'b'
  }
]

Я хочу, чтобы агрегация возвращалась

[
  {
    _id: ObjectID(),
    my_letter:'a'
  },
  {
    _id: ObjectID(),
    my_letter:'b'
  }
]

Я попробовал это в своем $match пайплайне

{
  $match: {
    _id: {
      $elemMatch: {
        $or: [
          { $eq: ["a"] },
          { $eq: ["b"] },
        ],
      },
    },
  },
},

Конечно, это не работает. Как бы вы предложили завершить конвейер $match?

Эй, пожалуйста, отредактируйте свой вопрос и будьте более конкретными? Я очень смущен вашим вопросом. «Мне нужно проверить все документы, конкретное поле которых содержится в массиве». или «Я хочу сопоставить все документы, в которых поле my_letter равно a или b». Какой из них вы хотите? Вы хотите запросить поле my_letter или поле _id? Пожалуйста, предоставьте полные примеры документов, которые у вас есть в базе данных, и результат, которого вы хотите достичь.

Lucas Soares 18.03.2022 00:42

Реальные документы слишком велики, но в основном мне нужно получить всех пользователей, у которых есть их _id в заданном массиве. Я пробовал с общими примерами. спасибо кстати

Loudrous 18.03.2022 08:56

И какое отношение my_letter имеет к _id? если принятый ответ правильный, вы даже не используете фильтр _id

Lucas Soares 18.03.2022 17:13

@LucasSoares Это всего лишь пример, который можно применить, независимо от точного названия. Я просто не хочу размещать здесь модель моей БД. Имя атрибута не имеет значения. Если это фу или _я бы или мое письмо для меня одно и то же. Просто хотел абстрагироваться. Извините, если я был неясен

Loudrous 19.03.2022 11:34
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
4
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
db.collection.find({
  my_letter: {
    $in: [ "a", "b" ]
  }
})

монгоплейграунд


db.collection.aggregate([
  {
    $match: {
      my_letter: {
        $in: [ "a", "b" ]
      }
    }
  }
])

монгоплейграунд

Другие вопросы по теме