2013-04-27 7 views
6

Ich versuche, die $regex innerhalb $match zu verwenden, es die passenden Dokumente nicht zurückgibt.

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

Kann mir jemand sagen, wo es falsch läuft oder die richtige Syntax?


Ich habe sogar versucht mit den

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

Antwort

12

ersetzen Wie es in den $regex docs sagt Ihnen die zwei Möglichkeiten verbunden, dies zu tun, sind:

Field2: /Value_2/g 

ODER

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

Aber ich habe auch deinen zweiten Versuch von 'Field2': { $regex: /Value_2/g } versucht und das hat auch funktioniert.

BTW, die Regex-Option g macht in diesem Zusammenhang keinen Sinn, da Sie sowieso nur eine Übereinstimmung benötigen. Beachten Sie, dass es nicht einmal in der $regex Dokumentation aufgeführt ist.

2

Ich habe es mit dem folgenden Code arbeiten:

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

auf dem Objektinhalt schieben console.dir(Value_match) auf Konsole es ausdruckt '/Value_2/'

Verwandte Themen