MongoDB正则expression式search – 从使用JavaScript驱动程序和NodeJS开始
我正在使用nodejs的JavaScript mongodb驱动程序。 我想在我的JavaScript函数中执行这个查询:
db.mycollection.find({Zip:/^94404/});
mongo客户端检索8个符合这个标准的文档。 但是,我的JavaScript代码不提取任何文件。
DataProvider.prototype.findByZipcode = function(zipCode,callback){ this.getCollection(function(error,collection){ 如果(错误) callback(误差); else { var qs ='{Zip:/ ^'+ zipCode +'/}'; collection.find(qs).toArray(function(error,results){ 如果(错误) callback(误差); 其他 callback(null,结果); }); } }); };
我也试过了
<pre> var qs = {Zip: '/^'+zipCode+'/'}; </pre>
顺便说一句,我发现确切的匹配工作正常,但这不是我想要的。
即。
<pre> var q = {'Zip' :zipCode}; </pre>
你几乎拥有它。 你不断地用一个string中的正则expression式来查找string '/^94404/'
去找东西,除非你有一些奇怪的外观邮政编码。
从JavaScript中的string构build正则expression式对象的最简单方法是使用new RegExp(...)
:
var query = { Zip: new RegExp('^' + zipCode) };
然后你可以:
collection.find(query).toArray(...)
这种事情在MongoDB shell中起作用,类似的东西在Ruby接口中起作用,所以它也应该在JavaScript接口中工作。
$options => i
不区分大小写的search
从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/