【问题标题】:Nested N1QL Update Query嵌套 N1QL 更新查询
【发布时间】:2021-04-21 19:40:22
【问题描述】:

我搜索了一些先前的线程,但根据我如何为 Couchbase 实现 N1QL 更新查询,我无法完全弄清楚我做错了什么。我正在运行以选择目标更新的查询运行良好:

SELECT p FROM `NoSQLDB` AS c UNNEST c.phones as p
WHERE c.type='com.model' AND p.typeCode != 'B_BUS'

这提供了以下结果:

[
  {
    "p": {
      "type": "com.model.Phone",
      "typeCode": "H_HOME",
    }
  },
  {
    "p": {
      "type": "com.model.Phone",
      "typeCode": "H_HOME",
    }
  }
]

我想更新哪些数据,但是,当我使用以下更新语句更新 typeCode 时,它​​会执行但实际上并没有改变任何东西:

UPDATE `NoSQLDB` AS c SET p.typeCode = 'B_BUS'
FOR p WITHIN c.phones WHEN c.type='com.model' AND
p.typeCode != 'B_BUS' END LIMIT 1

我也试过这个,它什么也没做,想也许父类型不可用:

UPDATE `NoSQLDB` AS c SET p.typeCode = 'B_BUS'
FOR p WITHIN c.phones WHEN p.type='com.model.Phone' AND
p.typeCode != 'B_BUS' END LIMIT 1

如果有任何相关性,父 JSON 如下所示:

[
  {
    "NoSQLDB": {
      "id": "01234",
      "keyType": "BANANA",
      "phones": [
        {
          "type": "com.model.Phone",
          "typeCode": "H_HOME",
        },
        {
          "type": "com.model.Phone",
          "typeCode": "B_BUS",
        }
      ],
      "type": "com.model",
      "updatedTimestamp": "2021-03-24T17:53:52.997+0000"
    }
  }
]

非常感谢任何关于我误入歧途的见解;提前谢谢你!

【问题讨论】:

    标签: nested couchbase n1ql


    【解决方案1】:

    所有 - 感谢任何正在审查的人,但我的一位团队成员发现了...如果有人遇到此问题,请查看有效的更新查询:

    UPDATE `NoSQLDB` AS c
    SET p.typeCode = “B_BUS” FOR p IN phones WHEN p.typeCode != ‘B_BUS’ END
    WHERE c.type=‘com.model’
    

    【讨论】:

    • 将谓词更改为 WHERE c.type="com.model" AND ANY p IN phone SATISFIES p.typeCode != "B_BUS" END 。如果所有数组元素都是“B_BUS”,这可以避免不必要的突变
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多