2012-06-17 48 views
11

我使用nodejs的JavaScript mongodb驅動程序。我想在我的JavaScript函數中執行此查詢:MongoDB正則表達式搜索 - 從使用javascript驅動程序和NodeJS開始

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> 

回答

28

你幾乎擁有它。你不斷收到一個字符串中的正則表達式,並尋找字符串'/^94404/'去找東西,除非你有一些奇怪的外觀郵政編碼。

從在JavaScript字符串構建一個正則表達式對象的最簡單方法是使用new RegExp(...)

var query = { Zip: new RegExp('^' + zipCode) }; 

然後,您可以:

collection.find(query).toArray(...) 

這種事情在MongoDB的殼工程和類似的東西在Ruby界面中工作,所以它也應該在JavaScript界面​​中工作。

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/