如何使用$regex在mongodb聚合查询$match



我试图在$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 }

正如您链接到的$regex文档中所说的,有两种方法可以做到这一点:

Field2: /Value_2/g

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

但我也试了你的第二次尝试'Field2': { $regex: /Value_2/g },效果也很好。

顺便说一句,g regex选项在这种情况下没有意义,因为你只需要一个匹配。请注意,$regex文档中甚至没有列出它。

我用下面的代码使它工作:

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/'

最新更新