$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"
  }
]