我正在使用nodejs的JavaScript mongodb驱动程序。我想在我的JavaScript函数中执行此查询:
db.mycollection.find({Zip:/^94404/});
mongo客户端检索8个符合此条件的文档。但是我的JavaScript代码不能获取任何文档。
DataProvider.prototype.findByZipcode = function(zipCode, callback) { this.getCollection(function(error, collection) { if (error) callback(error); else { var qs = '{Zip:/^'+zipCode+'/}'; collection.find(qs).toArray(function(error, results) { if (error) callback(error); else callback(null, results); }); } }); };
我也试过
<pre>
var qs = {Zip: '/^'+zipCode+'/'};
</pre>
顺便说一句,我发现完全匹配工作正常,但这不是我想要的。
即。
<pre>
var q = {'Zip' :zipCode};
</pre>
答案 0 :(得分:28)
你几乎拥有它。你最后会在字符串中使用正则表达式并查找字符串 '/^94404/'
,除非你有一些看起来很奇怪的邮政编码,否则它们会找到任何东西。
在JavaScript中使用字符串构建正则表达式对象的最简单方法是使用new RegExp(...)
:
var query = { Zip: new RegExp('^' + zipCode) };
然后你可以:
collection.find(query).toArray(...)
这种东西在MongoDB shell中有效,类似的东西在Ruby界面中工作,所以它也可以在JavaScript界面中工作。
答案 1 :(得分:9)
$options => i
用于不区分大小写的搜索
从string
db.collection.find({zip:{'$regex' : '^string', '$options' : 'i'}})
以string
db.collection.find({zip:{'$regex' : 'string$', '$options' : 'i'}})
包含string
db.collection.find({zip:{'$regex' : 'string', '$options' : 'i'}})
不包含string
db.collection.find({zip:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})
将此保留为书签,以及您可能需要的任何其他更改的参考。 http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/