21

我正在尝试使用$regexinside $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);
  }
});

谁能告诉我哪里出错或正确的语法?


我什至尝试更换

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

2 回答 2

31

正如您链接到的文档中所说,$regex执行此操作的两种方法是:

Field2: /Value_2/g

或者

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

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

顺便说一句,g正则表达式选项在这种情况下没有意义,因为无论如何您只需要一个匹配项。请注意,它甚至没有在$regex文档中列出。

于 2013-04-27T13:34:57.390 回答
6

我让它使用以下代码:

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

于 2013-04-29T05:27:56.157 回答