我需要使用正则表达式查找一些记录。当参数值以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'
}
答案 0 :(得分:1)
实际上 -
是一个特殊字符,不适用于regular expression
语法。
相反,您需要在此处使用https://tour.golang.org/moretypes/6运算符
{ "$match" : { "invoice" : { "$regex": "000-0000-2490", "$options": "i" } } }