2013-04-27 10 views
6

Próbuję użyć w ciągu $match, nie zwracając pasujących dokumentów.

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

Czy ktoś może mi powiedzieć, gdzie się nie udać, czy też poprawna składnia?


Próbowałem nawet z wymianą

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

Odpowiedz

12

Jak mówi w $regex Dokumentów ty powiązanych, dwa sposoby, aby to zrobić to:

Field2: /Value_2/g 

LUB

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

Ale spróbowałem także twojej drugiej próby 'Field2': { $regex: /Value_2/g } i to też zadziałało.

BTW, opcja regex g nie ma sensu w tym kontekście, ponieważ i tak potrzebujesz tylko jednego dopasowania. Zauważ, że nie ma go nawet w dokumentach $regex.

2

mam go pracy z następującego kodu:

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

Na pchanie zawartości obiektu do konsoli za pomocą console.dir(Value_match) wypisze '/Value_2/'

Powiązane problemy