繁体   English   中英

NodeJS MongoDB 动态查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM