根据查询参数过滤mongodblogging

我在Express.js中编写一个REST API来从mongo数据库中检索一些logging。 为了获得一组logging,我使用了一个标准的GET请求:

GET localhost:3000/api/books 

现在要实现filter,我使用了express-api-queryhandler 。 代码如下所示:

 routes.use(queryHandler.filter()); [...] .get((req: any, res: Response) => { Book.find(req.where, req.fields, req.options, (err: any, orders: any) => { res.status(200).json(books); }); }); 

所以现在当我想要检索一个特定的元素,我可以写如:

 GET localhost:3000/api/books?name=Harry%20Potter 

但是,实施(高于/低于)GT,GTE,LT,LTEfunction的最佳方式是什么? Node.js有没有好的库? 我只在Loopback文档中find了where函数,但是可以使用Loopback和Express吗?

我可以手动编写所有东西,但这不是一个好的解决scheme。 提前致谢。

编辑:我编辑了前面提到的包中的filter.js文件,以便它可以与gt,lt,gte,lte一起使用。 它看起来很安全,但也许有更多的validation更好的select?

 function filter (query, skip) { var filters = {}; var k; var SKIP_KEYS = [ 'fields', 'limit', 'offset', 'sort' ].concat(skip); for (k in query) { if (SKIP_KEYS.indexOf(k) === -1) { var param = query[k]; // Added part if(param.startsWith("gte_")) param = {"$gte": param.substr(4)} else if(param.startsWith("lte_")) param = {"$lte": param.substr(4)} else if(param.startsWith("gt_")) param = {"$gt": param.substr(3)} else if(param.startsWith("lt_")) param = {"$lt": param.substr(3)} // End of added part console.log(param); filters[k] = param; } } return filters; } module.exports = function (options) { var o = options || {}; return function (req, res, next) { req.where = filter(req.query, o.skip); next(); }; };