$addField 通过正则表达式条件 Mongo < 4.2
$addField by regex condition with Mongo < 4.2
我有一个 mongoDB collection objects:
{
name: "a",
email: "aaa@bestemail.com"
},
{
name: "b",
email: "bbb@bestemail123.com"
},
{
name: "c",
email: "ccc@diffemail.com"
}
如果电子邮件地址与 /bestemail/ 正则表达式匹配,我想向每个文档添加一个 true/false 字段。
意思是,对于当前 collection 我会得到:
{
name: "a",
email: "aaa@bestemail.com",
matching: true
},
{
name: "b",
email: "bbb@bestemail123.com",
matching: true
},
{
name: "c",
email: "ccc@diffemail.com",
matching: false
}
主要问题是我必须使用 mongo 版本 4.0.12,所以我不能使用 $regexMatch(可从 mongo 4.2 获得)
我试过使用:
$addFields: {"matching": {$cond: [{$in: ["$email", [/bestemail/]]}, true, false]}}
但我得到所有文档的 matching: false
。
感谢您的协助!
由于我无法访问版本为 4.0.12 的 MongoDB 服务器,所以我犹豫要不要回应,但这也许可行。 [我确实看过 archived docs。]
db.collection.aggregate([
{
"$addFields": {
"matching": {
"$cond": [
{
"$gt": [
{ "$indexOfCP": [ "$email", "bestemail" ] },
0
]
},
true,
false
]
}
}
}
])
在 mongoplayground.net 的错误服务器版本上尝试。
示例输出:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"email": "aaa@bestemail.com",
"matching": true,
"name": "a"
},
{
"_id": ObjectId("5a934e000102030405000001"),
"email": "bbb@bestemail123.com",
"matching": true,
"name": "b"
},
{
"_id": ObjectId("5a934e000102030405000002"),
"email": "ccc@diffemail.com",
"matching": false,
"name": "c"
}
]
我有一个 mongoDB collection objects:
{
name: "a",
email: "aaa@bestemail.com"
},
{
name: "b",
email: "bbb@bestemail123.com"
},
{
name: "c",
email: "ccc@diffemail.com"
}
如果电子邮件地址与 /bestemail/ 正则表达式匹配,我想向每个文档添加一个 true/false 字段。
意思是,对于当前 collection 我会得到:
{
name: "a",
email: "aaa@bestemail.com",
matching: true
},
{
name: "b",
email: "bbb@bestemail123.com",
matching: true
},
{
name: "c",
email: "ccc@diffemail.com",
matching: false
}
主要问题是我必须使用 mongo 版本 4.0.12,所以我不能使用 $regexMatch(可从 mongo 4.2 获得)
我试过使用:
$addFields: {"matching": {$cond: [{$in: ["$email", [/bestemail/]]}, true, false]}}
但我得到所有文档的 matching: false
。
感谢您的协助!
由于我无法访问版本为 4.0.12 的 MongoDB 服务器,所以我犹豫要不要回应,但这也许可行。 [我确实看过 archived docs。]
db.collection.aggregate([
{
"$addFields": {
"matching": {
"$cond": [
{
"$gt": [
{ "$indexOfCP": [ "$email", "bestemail" ] },
0
]
},
true,
false
]
}
}
}
])
在 mongoplayground.net 的错误服务器版本上尝试。
示例输出:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"email": "aaa@bestemail.com",
"matching": true,
"name": "a"
},
{
"_id": ObjectId("5a934e000102030405000001"),
"email": "bbb@bestemail123.com",
"matching": true,
"name": "b"
},
{
"_id": ObjectId("5a934e000102030405000002"),
"email": "ccc@diffemail.com",
"matching": false,
"name": "c"
}
]