具有取自字段值 [MongoDB] 的可变模式的正则表达式

regex with variable pattern taken from value of a field [MongoDB]

假设我有一些这种形状的文档:

[
  {
    name: "Name1",
    surname: "Surname1",
    fullName: "Name1 Surnmame1"
  },
  {
    name: "Name2",
    surname: "Surname2",
    fullName: "Name2 Surnmame2"
  },
  // I would like to detect this one where name and name inside fullName do not match
  {
    name: "Name3",
    surname: "Surname3",
    fullName: "Name1 Surnmame3"
  }
]

并且fullName是一个计算字段。

理想情况下,我想检测 name 不属于 fullName 的文档。这可能是由于计算部分的一些错误实现造成的。

我希望像下面这样的东西至少可以确定哪些 name/fullname 确实匹配(与我正在尝试做的相反):

db.people.find({"fullName": /"$name"/});

但是,这会搜索 $name 而不是字段 name 在同一文档中保存的值。知道如何实现吗?

注意: 我尝试 运行 针对 DocumentDB (v3.6.0),但如果您对 MongoDB 有任何建议,它也可以工作.

您可以使用 $indexOfCP 检查 name 是否在 fullName 中。如果子字符串不存在,$indexOfCP 将 return -1.

根据 official AWS documentDB document,您的 v3.6 数据库应该支持 $indexOfCP

db.collection.aggregate([
  {
    $addFields: {
      idx: {
        "$indexOfCP": [
          "$fullName",
          "$name"
        ]
      }
    }
  },
  {
    "$match": {
      idx: -1
    }
  }
])

这是Mongo playground供您参考。