如何将查询转换为使用正则表达式而不是相等
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将查询转换为使用正则表达式而不是相等相关的知识,希望对你有一定的参考价值。
我正在使用MongoDB,我有以下记录:
{
name: "a",
status: [
{ age: 15, closed: true},
{ age: 38, closed: true},
{ age: 42, closed: false},
]
},
{
name: "b",
status: [
{ age: 29, closed: true},
{ age: 5, closed: false},
]
}
我想检查状态中的前一个对象是否具有例如age = 29。 所以我有这个工作查询:
db.col.find({
$expr: {
$eq: [
29,
{
$let: {
vars: { beforeLast: { $arrayElemAt: [ "$status", -2 ] } },
in: "$$beforeLast.age"
}
}
]
}
})
但我现在要检查例如年龄是否包含类似“2”的值。我需要使用正则表达式。无论如何转换该查询以使用正则表达式/而不是$eq
运算符?
PS:我不想使用聚合,因为我正在使用旧版本。
答案
您可以使用$indexOfCP
查找字符串字符内的子字符串
db.collection.find({
"$expr": {
"$ne": [
{
"$indexOfCP": [
{ "$toLower": {
"$let": {
"vars": {
"beforeLast": {
"$arrayElemAt": [
"$status",
-2
]
}
},
"in": "$$beforeLast.age"
}
}},
"2"
]
},
-1
]
}
})
另一答案
尝试聚合
db.collection.aggregate([
{
$project:
{
last: { $arrayElemAt: [ "$status", -2 ] },
}
},
{$addFields:{
ageInString: { $substr: [ "$last.age", 0, 3 ] }
}},
{$match:{ageInString:{ $regex: '^2' }}}
])
以上是关于如何将查询转换为使用正则表达式而不是相等的主要内容,如果未能解决你的问题,请参考以下文章