我有一个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()调用是否有问题,还是部分匹配的字符串结构?
答案 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);
}
});
};
如果有人有更优雅的解决方案,请分享。这个看起来有点乱,但完成了工作。