NodeJS MongoDBdynamic查询

我在'/ api / jobs /'上有一个get方法运行的NodeJS服务器。 当被调用的时候,我从url中得到一些查询string参数,他们对MongoDB数据库进行查询以获取作业。

Example Url: '/api/jobs/?Groups=1,2&Statuses=3,4' 

我想要构build的MongoDB查询是这样的:

 { $or: [{"Group.Id" : 1}, {"Group.Id" : 2}], $or: [{"Status.Id": 3}, {"Status.Id": 4}]} 

如果我直接对数据库运行这个,我得到我需要的结果,但我想不出在JavaScript中dynamic构build查询的方式。 我所做的任何尝试都给了我一个这样的对象,因为$或property只能在适当的JSON对象中存在一次。

 {$or : [{"Group.Id" : 1}, {"Group.Id" : 2}]} 

有关如何使用JavaScript或使用MongoDB Node API来做到这一点的任何想法?

首先得到查询属性,这将是string:

 const groupString = req.query.Groups; // === '1,2' const statusString = req.query.Statuses; // === '3,4' 

在逗号分割和parsing整数:

 const groupNums = groupString.split(',').map(parseInt); // === [1, 2] const statusNums = statusString.split(',').map(parseInt); // === [3, 4] 

然后search任何组ID。 你的查询应该是这样的:

 const query = {"Group.Id": { $in: groupNums }, "Status.Id": { $in: statusNums } }; 

对状态ID执行相同的操作。

你可以使用这个

 app.get('/', function(req, res, next) { var queryArry = []; for (var i in req.query) { var sampleObject = { value: [] }; sampleObject.name = i; req.query[i].split(',').forEach(function(each) { sampleObject.value.push(parseInt(each)); }) queryArry.push(sampleObject); } var mongoquerry = {}; for (var i in queryArry) { mongoquerry[queryArry[i].name] = queryArry[i].value; } res.send(mongoquerry); }); 

但在这种情况下,您必须发送MongoDB的相同名称字段和查询参数键。如果您这样做,它是完全dynamic的查询生成器。