如何在REST API中使用多个字段进行search

我想执行一个search请求,如https://api.mywebsite.com/users/search?firstname=jo&lastname=smit&date_of_birth=1980

我有一个用户架构,如:

 var UserSchema = new mongoose.Schema({ role: { type: String, default: 'user' }, firstname: { type: String, default: null }, lastname: { type: String, default: null }, date_of_birth: { type: Date, default: null, select: false }, }); 

我到目前为止使用的是stackoverflow帮助 :

 // check every element in the query and perform check function function search_t(query) { return function (element) { for (var i in query) { if (query[i].function(element[i], query[i].value) == false) { return false; } } return true; } } // prepare query object, convert elements and add check function // convert functions are used to convert string (from the query) in the right format // check functions are used to check values from our users function prepareSearch(query, cb) { let fields = { "firstname": { "type": "string", "function": checkString, "convert": convertString }, "lastname": { "type": "string", "function": checkString, "convert": convertString }, "date_of_birth": { "type": "date", "function": checkDate, "convert": convertDate } }; for (let k in query) { k = k.toLowerCase(); if (!(k in fields)) { return cb({message: "error"}); } query[k] = {value: fields[k].convert(query[k]), function: fields[k].function}; } return cb(null, query); } // linked to a route like router.get('/search/', controller.search); export function search(req, res) { return User.find({}).exec() .then(users => { return prepareSearch(req.query, (err, query) => { if (err) { return handleError(res)(err); } else { return res.status(200).send(users.filter(search_t(query))); } }); }) .catch(handleError(res)); } 

所以这个代码的作品,但我不知道这是一件好事。 我有很多其他的领域来检查(如性别,…),我不知道是否是一件好事,“手动”。

我不知道mongoose是否有这个function。 我应该使用其他方法在我的REST API中对用户进行筛选/search吗?

我在这里很新,我不确定我的工作方式

谢谢,Ankirama