以下内容让我很困惑。我花了很多时间试图理解为什么 collection.find() 不适用于作为对象传递的正则表达式。正则表达式匹配来自包装在 POST 请求正文中的 HTTP。然后我尝试收集查询(以字符串格式)并执行查询。问题似乎是,除非正则表达式是在没有引号的 Node 内编写的,否则它将不起作用。也就是说,它必须是不带引号的文字。
例如,以下工作正常:
var query1 = {
company: {
'$regex': /goog/
}
};
collection.find(query1, {}).toArray(function (err, docs) {
// Got results back. Awesome.
});
但是,如果数据包装在一个对象中,它不会返回任何内容。我怀疑这是因为值在幕后被引用(即“/goog/”):
// Assume
var query2 = {
company: {
'$regex': query.company
}
};
collection.find(query2, {}).toArray(function (err, docs) {
// Got nothing back.
});
我已经用 mongo shell 对其进行了测试,我可以确认以下内容:
// Returns 5 results
db.getCollection("contacts").find( { "company": /goog/ } )
// Doesn't match anything
db.getCollection("contacts").find( { "company": "/goog/" } )
此外,我刚刚发现了以下内容:如果我用引号写出值
// Works fine
var companyRegex = {'$regex': /goog/};
var query3 = {
company: companyRegex
};
所以从技术上讲,一个没有引号的“文字”正则表达式可以正常工作。但如果它是一个字符串,它不会工作。即使在尝试用任何内容替换双引号和单引号之后(即基本上删除它们。)
知道如何将正则表达式匹配逐字传递给 find() 吗?我已经研究过了,找到了很多潜在的解决方案,可惜它对我不起作用。
提前致谢!