#node.js #mongoose
#node.js #мангуст
Вопрос:
Я хочу настроить свою поисковую корзину в коллекции mongoose на основе параметра запроса
Course.find(
{
instTypeId: 1,
status: 1,
"institute.instId": req.body.instId,
"institute.majorId": req.body.majorId
},
)
Я пытался это сделать, но если идентификатор req.intID или req.major пуст, он получает только записи с пустым institute.instId
В случае, если req.intID или req.major или оба, я не хочу включать их в поиск
Комментарии:
1. Какого рода
request
данные вы ожидаете? из параметра запроса или тела? или запрос -это что-то другое?2. req = request.body, я ожидаю, что два значения будут пустыми, или одно из них не является, или оба не являются пустыми
Ответ №1:
Вы можете использовать Object.assign
для добавления значений к объекту поиска, если они существуют:
let instId;
let majorId = 1;
if (instId){
search = Object.assign(search, {"institute.instId": instId});
}
if (majorId){
search = Object.assign(search, {"institute.majorId": majorId});
}
Course.find(search , (err, foundCourses) => {
// Do stuff
});
Ответ №2:
Предполагая, что вы получаете проанализированный req.body
, быстрый и грязный способ может быть:
Course.find({
instTypeId: 1,
status: 1,
// if req.body.instId is 'undefined', then it returns false so the expression returns 'null'
"institute.instId": req.body.instId || null,
"institute.majorId": req.body.majorId || null
})
Вы можете создать объект запроса аналогичным образом:
var query = {}
if (req.body.instId) {
// using object destructuring
query = {..., "institute.instId": req.body.instId }
}
Однако желательно настроить некоторую проверку в зависимости от варианта использования
Ответ №3:
let search = {
instTypeId: 1,
status: 1
};
if (req.body.instId) {
search["institute.instId"] = req.body.instId;
}
if (req.body.majorId) {
search["institute.majorId"] = req.body.majorId;
}
Course.find(search)
Я сделал это, чтобы настроить столбцы поиска