[英]NodeJS MongoDB Dynamic Query
我有一个 NodeJS 服务器运行 express,在“/api/jobs/”中有一个 get 方法。 当被调用时,我从 url 获取一些查询字符串参数,然后他们对 MongoDB 数据库进行查询以获取工作。
Example Url: '/api/jobs/?Groups=1,2&Statuses=3,4'
我试图构建的 MongoDB 查询是这样的:
{ $or: [{"Group.Id" : 1}, {"Group.Id" : 2}], $or: [{"Status.Id": 3}, {"Status.Id": 4}]}
如果我直接对数据库运行它,我会得到我需要的结果,但我想不出在 JavaScript 中动态构造查询的方法。 我所做的任何尝试都会给我一个这样的对象,因为 $or 属性只能在正确的 JSON 对象中存在一次。
{$or : [{"Group.Id" : 1}, {"Group.Id" : 2}]}
关于如何使用 JavaScript 或通过 MongoDB Node API 执行此操作的任何想法?
首先获取查询属性,这将是字符串:
const groupString = req.query.Groups; // === '1,2'
const statusString = req.query.Statuses; // === '3,4'
在逗号处拆分并解析为整数:
const groupNums = groupString.split(',').map(parseInt); // === [1, 2]
const statusNums = statusString.split(',').map(parseInt); // === [3, 4]
然后搜索任何组 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 mongoquery = {};
for (var i in queryArry) {
mongoquery[queryArry[i].name] = queryArry[i].value;
}
res.send(mongoquery);
});
但在这种情况下,您必须发送 MongoDB 的同名字段和查询参数键。 如果你这样做了,它就是完全动态的查询构建器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.