Мне нужно проверить все документы, конкретное поле которых содержится в массиве.
Например, у меня есть массив
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?
Реальные документы слишком велики, но в основном мне нужно получить всех пользователей, у которых есть их _id в заданном массиве. Я пробовал с общими примерами. спасибо кстати
И какое отношение my_letter имеет к _id? если принятый ответ правильный, вы даже не используете фильтр _id
@LucasSoares Это всего лишь пример, который можно применить, независимо от точного названия. Я просто не хочу размещать здесь модель моей БД. Имя атрибута не имеет значения. Если это фу или _я бы или мое письмо для меня одно и то же. Просто хотел абстрагироваться. Извините, если я был неясен
db.collection.find({
my_letter: {
$in: [ "a", "b" ]
}
})
db.collection.aggregate([
{
$match: {
my_letter: {
$in: [ "a", "b" ]
}
}
}
])
Эй, пожалуйста, отредактируйте свой вопрос и будьте более конкретными? Я очень смущен вашим вопросом. «Мне нужно проверить все документы, конкретное поле которых содержится в массиве». или «Я хочу сопоставить все документы, в которых поле my_letter равно a или b». Какой из них вы хотите? Вы хотите запросить поле my_letter или поле _id? Пожалуйста, предоставьте полные примеры документов, которые у вас есть в базе данных, и результат, которого вы хотите достичь.