猫鼬聚合匹配不适用于正则表达式

时间:2018-08-14 02:24:19

标签: node.js mongodb express mongoose

我需要使用正则表达式查找一些记录。当参数值以0结尾时,结果为空,但是当最后一个字符不为零(1-9)时,查询工作正常。

Invoice.aggregate([{
  '$lookup': {
    'from': 'clients',
    'localField': 'client',
    'foreignField': '_id',
    'as': 'client'
  }
}, {
  '$unwind': '$client'
}, {
  '$lookup': {
    'from': 'employees',
    'localField': 'sold_by',
    'foreignField': '_id',
    'as': 'sold_by'
  }
}, {
  '$unwind': '$sold_by'
}, {
  '$lookup': {
    'from': 'payment_types',
    'localField': 'payment_type',
    'foreignField': '_id',
    'as': 'payment_type'
  }
}, {
  '$unwind': '$payment_type'
}, {
  '$lookup': {
    'from': 'payments',
    'localField': 'payments.payment',
    'foreignField': '_id',
    'as': 'payment'
  }
}, {
  '$unwind': '$payment'
}, {
  $match: {
        'invoice': {
      $regex: /2490/i
    }
  }
}])

查询工作时,结果将排除所有以0结尾的记录。 我尝试以其他方式使用正则表达式

"$match" : {
                "invoice" : /^.*2490.*$/i
            }

结果相同。

我在其他String字段中使用了正则表达式,并且仅在此字段中无法正常工作。字段存储这样的值

{
'000-0000-2490',
'000-0000-2491',
'000-0000-2492'
}

1 个答案:

答案 0 :(得分:1)

实际上 - 是一个特殊字符,不适用于regular expression语法。

相反,您需要在此处使用https://tour.golang.org/moretypes/6运算符

{ "$match" : { "invoice" : { "$regex": "000-0000-2490", "$options": "i" } } }