在mongodb聚合中的$expr中使用$regex



我的文档如下

doc = {
name: 'abc',
age:20
}

我的查询看起来像

{ $expr: {$and:[{ $gt:[ "$age",  10 ] },
{ $regex:["$name",'ab']}
]
}
} }

但它不起作用,我得到一个错误

无法识别的表达式"$regex">

如何使其工作?

我的原始查询看起来像这个

db.orders.aggregate([{
$match: {}},
{$lookup: {
from: "orders",
let: {
"customer_details": "$customerDetails"
},
pipeline: [
{
$match: {
$expr: {
$and: [
{ $or: [
{
$eq: ["$customerDetails.parentMobile","$$customer_details.parentMobile"]
},
{$eq: ["$customerDetails.studentMobile","$$customer_details.parentMobile"]
},
{$eq: ["$customerDetails.studentMobile","$$customer_details.parentMobile"]
},
{$eq: ["$customerDetails.studentMobile","$$customer_details.studentMobile"]
}
]
},
{$eq: ["$customerDetails.zipCode","$$customer_details.zipCode"]},
{$eq: ["$customerDetails.address","$$customer_details.address"]}
]
}
}
}],
as: "oldOrder"
}
}])

我想使用regex来匹配address

任何帮助都将不胜感激。提前谢谢。

$regex是一个查询运算符,您不能在$expr中使用,因为它只支持聚合管道运算符。

{
"$expr": { "$gt": ["$age", 10] } ,
"name": { "$regex": "ab" }
}

如果您有mongodb4.2,您可以使用$regexMatch

{ "$expr": {
"$and": [
{ "$gt": ["$age", 10] },
{
"$regexMatch": {
"input": "$name",
"regex": "ab", //Your text search here
"options": "i",
}
}
]
}}

如果您的mongoDB版本是4.2,那么您可以使用$regexMatch

试试这个

db.collection.find({
$expr: {
$and: [
{
$gt: [
"$age",
10
]
},
{
$regexMatch: {
input: "$name",
regex: "ab"
}
}
]
}
})

查看此Mongo Playground

相关内容

  • 没有找到相关文章