2012-06-17 34 views
11

Tôi đang sử dụng trình điều khiển mongodb JavaScript từ nútjs. Tôi muốn thực hiện truy vấn này trong hàm JavaScript của mình:MongoDB Tìm kiếm biểu thức chính quy - Bắt đầu bằng cách sử dụng trình điều khiển javascript và NodeJS

db.mycollection.find({Zip:/^94404/}); 

Trình khách mong nhận được 8 tài liệu phù hợp với tiêu chí này. Tuy nhiên, mã JavaScript của tôi không tìm nạp bất kỳ tài liệu nào.

 

    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); 
       }); 
      } 
     }); 
    }; 

Tôi cũng đã cố gắng

<pre> 
var qs = {Zip: '/^'+zipCode+'/'}; 
</pre> 

Btw, tôi tìm kết hợp chính xác hoạt động tốt, nhưng đó không phải là những gì tôi muốn.

tức là.

<pre> 
var q = {'Zip' :zipCode}; 
</pre> 

Trả lời

28

Bạn gần như có nó. Bạn tiếp tục kết thúc với một regex bên trong một chuỗi và tìm kiếm các chuỗi'/^94404/' sẽ tìm thấy bất cứ điều gì trừ khi bạn có một số mã zip tìm kiếm lạ.

Cách đơn giản nhất để xây dựng một đối tượng regex từ một chuỗi trong JavaScript là sử dụng new RegExp(...):

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

Sau đó, bạn có thể:

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

Đó là loại điều làm việc trong vỏ MongoDB và những thứ tương tự cũng hoạt động trong giao diện Ruby nên nó cũng hoạt động trong giao diện JavaScript.

9

$options => i đối với trường hợp tìm kiếm không nhạy cảm

Bắt đầu với string

db.collection.find({zip:{'$regex' : '^string', '$options' : 'i'}}) 

End với string

db.collection.find({zip:{'$regex' : 'string$', '$options' : 'i'}}) 

string

db.collection.find({zip:{'$regex' : 'string', '$options' : 'i'}}) 

Không Có string

db.collection.find({zip:{'$regex' : '^((?!string).)*$', '$options' : 'i'}}) 

Giữ điều này làm chỉ mục, và một tham chiếu đối với bất kỳ sự thay đổi khác mà bạn có thể cần. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

Các vấn đề liên quan