mongodb - 如何将查询转换为使用正则表达式而不是相等
问题描述
我正在使用 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},
]
}
我想检查状态中的最后一个对象是否具有例如年龄 = 29。
因此我有这个工作查询:
db.col.find({
$expr: {
$eq: [
29,
{
$let: {
vars: { beforeLast: { $arrayElemAt: [ "$status", -2 ] } },
in: "$$beforeLast.age"
}
}
]
}
})
但我现在想检查例如年龄是否包含像“2”这样的值。我需要使用正则表达式。无论如何将该查询转换为使用正则表达式 inside/instead$eq
运算符?
PS:我不想使用聚合,因为我正在使用旧版本。
解决方案
您可以使用$indexOfCP
在字符串字符中查找子字符串
db.collection.find({
"$expr": {
"$ne": [
{
"$indexOfCP": [
{ "$toLower": {
"$let": {
"vars": {
"beforeLast": {
"$arrayElemAt": [
"$status",
-2
]
}
},
"in": "$$beforeLast.age"
}
}},
"2"
]
},
-1
]
}
})
推荐阅读
- ember.js - 循环条件渲染
- python - 如何使用 numpy.meshgrid 绘制函数
- android - 我正在尝试在我的应用程序中集成 Agora 语音通话,但出现 java.lang.UnsatisfiedLinkError
- java - 如何从javafx中的嵌套列表制作tableview?
- c# - LINQ 从字典中获取第一项不为空或为空
- gitlab - GitLab CI 部署管道中的手动批准
- sql - 如何从 Oracle SQL 中删除具有完全相同数据的多行
- android - 将应用程序从 Play 商店分发给内部测试人员
- java - 从java项目中提取所有字符串文字
- ruby-on-rails - 如何在 docker 中配置 nginx 和乘客到 rails 应用程序