I am trying to use the $regex within $match, its not returning the matching documents.
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);
}
});
Can anyone tell me where its going wrong or the correct syntax?
'Field2': { $regex: /Value_2/g}
As it says in the $regex docs you linked to, the two ways to do this are:
Field2: /Value_2/g
OR
Field2: { $regex: 'Value_2', $options: 'g' }
But I also tried your second attempt of 'Field2': { $regex: /Value_2/g } and that worked as well.
BTW, the g regex option doesn't make sense in this context as you just need one match anyway. Note that it isn't even listed in the $regex docs.
I got it working with the following code:
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);
}
});
On pushing the object content to console using console.dir(Value_match) it prints out '/Value_2/'