как реализовать параметры логических запросов в MongoDB (NodeJS), если вы не знаете размер массива фильтров?

#node.js #mongodb

Вопрос:

как я могу реализовать фильтрацию моего запроса MongoDB, если я не знаю, сколько фильтров я буду использовать в логическом операторе «и».

 //Get ads from database
async function getAds() {
    return ad = await ads.Ad.find()
    .and(//filter using tags variable);
}
 

интерфейс введет неизвестное количество тегов в массив, называемый тегами, который выглядит следующим образом

 "Tags": ["karachi","lahore"]
 

проблема в том, что я не знаю, сколько элементов будет в переменной тегов, которую мне выдаст интерфейс с помощью параметров запроса. любая помощь будет признательна. Как я могу отдельно записать все эти теги в оператор и, когда я не знаю, сколько их будет в этом массиве.

Ответ №1:

похоже, вам нужно следующее…

 async function getAds() {
    return ad = await ads.Ad.find({ "Tags": { $in: [ "karachi", "lahore" ] } });
}
 

Комментарии:

1. Разве это утверждение не действует как логический запрос ИЛИ, а не как И, которое мне нужно в данном случае. Я хочу, чтобы оба этих тега были там, чтобы в запросе отображался не какой-либо один из тегов.

2. Поэтому я думаю, что ответом на этот вопрос является оператор $all, который действует как оператор AND. Спасибо вам за вашу помощь

3. Да, $in-это условие ИЛИ, в то время как $все-это условие И