мангуст, поиск данных на основе запроса

#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)
  

Я сделал это, чтобы настроить столбцы поиска