mongodb — использовать строку условия соответствия только на основе условия

#mongodb

#mongodb

Вопрос:

Я проверяю условие на основе переменной среды. Моя цель — включить дополнительное поле соответствия на основе переменной среды. В настоящее время я делаю это, что работает, но есть дополнительная ненужная проверка произвольного значения 999.

const filterByCountry = process.env.SITE_NAME == "awesomeDomain"?"299":"999";

а затем в совпадении

   $match:{
    ... some fields...
    country: { $not: { $eq: filterByCountry } }, // how to use this line only when filterByCountry=true
    }, 
  

Это работает, потому что filterByCountry будет иметь значение «299» (просто пример), что мне нужно проверить. Я использовал 999, который даже не существует в моей базе данных, чтобы отменить условие (то же самое, что не иметь всей строки).

Чтобы избежать дополнительной обработки проверки на 999, как я могу перенести условие страны, если я изменю назначение на: const filterByC = process.env.SITE_NAME == "awesomeDomain"//result will be true or false.

   $match:{
    ... some fields...
    if (filterByCountry) {
    country: { $not: { $eq: filterByCountry } }, // how to use this line only when filterByCountry=true
    }
  

Я добавил условие if выше, чтобы показать, чего я хочу достичь, но это недопустимый синтаксис mongodb.

Ответ №1:

Переданный фильтр $match также является объектом, который также может быть создан динамически, например,

 const filter = {
  ... some fields ...
}

if (process.env.SITE_NAME == "awesomeDomain") { filter.country = { $ne: 299 }}
  

и затем

 {$match: filter}