猫鼬:使用$或跨多个字段进行部分匹配

时间:2018-05-04 15:17:06

标签: mongodb mongoose

我有一个MongoDB查询,可以在控制台中正常工作,以获得跨多个字段的部分匹配:

db.Col.find({ "$or": [ { "product": /Su/}, { "location": /Su/ },{ "category": /Su/ } , { "owner": /Su/ }] })

我在我的角应用程序中使用mongoose,无法弄清楚如何构建它来工作。 “过滤器”是我的api电话中的文字。

exports.listPartialMatches = function(req, res) {
  var filter = req.params.filter;
  Col.find().or([ { "project": /filter/ }, { "location": /filter/ },{ "location": /filter/ } , { "owner": /filter/ }]).exec(function(err, mycol) {
    if (err) {
      return res.status(400).send({
        message: errorHandler.getErrorMessage(err)
      });
    } else {
      res.jsonp(mycol);
    }
  });
};

由于某种原因,上面的内容返回一个空数组,而console命令却没有。我也尝试了“/”+ filter +“/”和/ filter / i但它们都回来了。

这里实际的find()调用是否有问题,还是部分匹配的字符串结构?

1 个答案:

答案 0 :(得分:0)

我没有弄清楚如何使用/ filter / notation但这有效:

exports.listPartialMatches = function(req, res) {
  var filter = req.params.filter;
  Col.find().or([ { "project": new RegExp(filter, "i") }, { "location": new RegExp(filter, "i") },{ "location": new RegExp(filter, "i") } , { "owner": new RegExp(filter, "i") }]).exec(function(err, mycol) {
    if (err) {
      return res.status(400).send({
        message: errorHandler.getErrorMessage(err)
      });
    } else {
      res.jsonp(mycol);
    }
  });
};

如果有人有更优雅的解决方案,请分享。这个看起来有点乱,但完成了工作。