2013-04-27 17 views
6

$regex$match内で使用しようとしていますが、一致するドキュメントが返されません。

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

どこの人が間違っているのか、正しい構文を教えていただけますか?


私もそれが言うように、あなたがこれを行うには、二つの方法にリンク $regexドキュメントに

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

答えて

12

を交換してみましたが、次のとおりです。

Field2: /Value_2/g 

OR

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

しかし、私は'Field2': { $regex: /Value_2/g }の2回目の試みも試みましたが、それもうまくいきました。

g正規表現オプションは、このコンテキストでは意味がありません。なぜなら、とにかく1つだけ一致する必要があるからです。それは$regex文書にも記載されていないことに注意してください。

2

私はそれが次のコードで作業しました:それは'/Value_2/'

を出力 console.dir(Value_match)を使用してコンソールにオブジェクトのコンテンツをプッシュで

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