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/