У пользователя есть форма для заполнения и поиска документов в коллекции mongoDB. Пользователю не нужно заполнять все входные данные формы, но те, которые пользователь заполнил, должны запрашиваться вместе. Входные данные, которые пользователь не заполнил go в бэкэнд как "" пустая строка.
мой запрос выглядит так:
let cf = await Cf.find({
$and: [
{userId: userId},
{$and: [
{name: name == '' ? null : name},
{catg: catg == '' ? null : catg},
{value: value == '' ? null : value}
]}
]
});
Итак, для запроса я установил условие что если значения равны "", то я изменяю его на null
, но mon goose фактически ищет нулевые значения. Есть ли какой-то пустой заполнитель, который возвращает все документы? Если я оставлю пустую строку или изменим ее на undefined
, она также не будет работать.
, что будет лучшим подходом, если пользователь оставит несколько пустых полей?
ОБНОВЛЕНИЕ
Используя логику mickl c и несколько настроек, она работала отлично. вот окончательный результат.
let query = {
$and: [
{userId: userId}
]
};
let subQuery = [];
if (name !== ''){
subQuery.push({name: name})
};
if (catg !== ''){
subQuery.push({catg: catg})
};
if (value !== ''){
subQuery.push({value: value})
};
if( name !== '' || catg !== '' || value !== ''){
query.$and.push({$and: subQuery})
};
let cf = await Cf.find(query);