2013-04-27 274 views
6

我試圖在$match內使用$regex,它沒有返回匹配的文檔。

db.collection('MyCollection', function (err, collection) { 
    collection.aggregate([ 
    { $match: { 'Code': 'Value_01', 'Field2': { $regex: '/Value_2/g' } } }, 
    { $project: { 
     _id: 1, 
     CodeNumber: '$Code', 
     FieldName2: '$Field2' 
     } 
    } 
    ], function (err, Result_doc) { 
    console.log(Result_doc); 
    } 
}); 

任何人都可以告訴我它在哪裏出錯或正確的語法?


我即使更換

'Field2': { $regex: /Value_2/g } 

回答

12

因爲它說,在你的聯繫,這兩個方法可以做到這一點$regex文檔試圖爲:

Field2: /Value_2/g 

OR

Field2: { $regex: 'Value_2', $options: 'g' } 

但我也試過你的第二次嘗試'Field2': { $regex: /Value_2/g },那也起作用。

順便說一句,g正則表達式選項在這種情況下沒有意義,因爲您只需要一個匹配。請注意,它甚至沒有列在$regex文檔中。

2

我把它用下面的代碼工作:

var Value_match = new RegExp('Value_2'); 

db.collection('MyCollection', function (err, collection) { 

    collection.aggregate([ 
    { $match: { Code: 'Value_01', Field2: { $regex: Value_match } } }, 
    { $project: { 
     _id: 1, 
     CodeNumber: '$Code', 
     FieldName2: '$Field2' 
     } 
    } 
    ], function (err, Result_doc) { 
    console.log(Result_doc); 
    } 
}); 

在推動對象物含量使用console.dir(Value_match)它打印出'/Value_2/'

安慰
相關問題