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的查询生成器。