【问题标题】:regex with variable pattern taken from value of a field [MongoDB]具有取自字段值的变量模式的正则表达式 [MongoDB]
【发布时间】:2022-01-21 12:41:37
【问题描述】:

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

[
  {
    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 的文档。这可能是由于计算部分的一些错误实现而发生的。

我希望以下内容至少可以确定真正匹配的名称/全名(与我尝试做的相反):

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

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

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

【问题讨论】:

    标签: mongodb mongodb-query aws-documentdb


    【解决方案1】:

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

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

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

    这是Mongo playground供您参考。

    【讨论】:

    • 这是我需要的,但我在这里运气不好(不支持功能:303):DocumentDB 不支持$expr...
    • @LuckyLuke 你能看看this 是否适合你吗?
    • 是的,成功了!谢谢!
    • @LuckyLuke 感谢您的确认。我已经相应地更新了答案
    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 2020-03-10
    • 2022-07-08
    • 1970-01-01
    • 2020-04-27
    • 2012-10-21
    相关资源
    最近更新 更多