2015-07-10 75 views
0

我想使用正則表達式來查找使用MongoDB在Express.js上匹配特定模式的記錄。在Express上使用Regex和MongoDB

這裏是我的代碼

var urlList = []; 
var db = req.db; 
var collection = db.get('project'); 

var regex = '/^'+url+'/'; 
console.log('regex = '+regex); 
collection.find({url: { $regex: regex, $options: 'i' }},function(err,list){ 

    console.log('length = '+list.length); 
    var arrayUrl = []; 
    for (var i=0;i<list.length;i++){ 
     console.log(list[i].url); 
     arrayUrl.push(list[i].url); 
    } 
}); 

但我得到list.length = 0,雖然數據庫包含確保與該模式匹配的記錄。

在CMD

db.project.find({url:{$regex:/^Projek-1/,$options: 'i'}}); 

使用以下命令我得到了我想要的結果。

如何在express.js上使用正則表達式來查找MongoDB數據庫中的匹配記錄?

+1

你逝去的,而不是正則表達式對象的字符串。嘗試使用'新RegExp' – hassansin

+0

您正在使用URL字符串作爲正則表達式?您最有可能必須將其轉義:'var regex = new RegExp(「^」+ url.replace(/ [ - \/\\^$ * +?。()| [\] {}]/g,' \\ $&'),'i');',並從後面的代碼中刪除',$ options:'i''。請檢查。 –

+0

我不確定你是否看到,但'^'只在字符串的開始處使正則表達式匹配。如果要匹配多次出現的模式,則需要將其刪除。 –

回答

0

首先,你並不是真的需要使用$regex,你可以用url: /foobar/i

無論如何,問題是你沒有創建一個正確的RegExp對象,只有一個字符串看起來像之一。通過創建RegExp

實例的新實例,使用適當的一個:

var re = new RegExp("^" + url); 

... 

find({url: re}) 
相關問題