Как создать запрос mon goose, который поддерживает пустые значения и возвращает все - PullRequest
1 голос
/ 10 марта 2020

У пользователя есть форма для заполнения и поиска документов в коллекции 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);

1 Ответ

1 голос
/ 10 марта 2020

Если значение пустое, то оно не может быть включено в ваш запрос, попробуйте применить этот логику построения запроса c, прежде чем нажать .find():

let userId = 1, name = 'a', catg = '', value = '';

let query = { userId: userId };

if(name !== ''){
   query.name = name;
}

if(catg !== ''){
   query.catg = catg;
}

if(value !== ''){
   query.value = value;
}

console.log(query);
let cf = await Cf.find(query);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...