【问题标题】:Couchbase N1QL: Update document attribute based on another attributeCouchbase N1QL:根据另一个属性更新文档属性
【发布时间】:2018-09-06 08:47:25
【问题描述】:

我正在努力处理 update-for N1QL 查询

我的文件如下所示:

{
"invalidityReasons": {
    "AU": [
      "ANCESTOR_DEACTIVATED_OR_INVALID"
    ],
    "BE": [
      "ANCESTOR_DEACTIVATED_OR_INVALID"
    ],
    "BG": []
}
"metadata": {
  "configurations": {
    "AU": {
      "enabled": true,
    },
    "BE": {
      "enabled": false,
    },
    "BG": {
      "enabled": true,
    }
  }
}
}

我正在尝试做的事情:

对于 所有 个具有无效性原因“ANCESTOR_DEACTIVATED_OR_INVALID”并已激活(即“启用”:在 metadata.configurations 中为真)的国家/地区 => 停用该国家/地区(即“启用”:假)

在上面的示例中,应该停用 AU(澳大利亚)

我现在在哪里

这意味着在我的脑海中:

  • 想想所有国家
  • 找到那些无效原因 = ANCESTOR_DEACTIVATED_OR_INVALID + enable = true
  • 更新激活

所以update-for 看起来不错,但我无法让它工作:

update `data` t
SET  t.metadata.configurations.[country].enabled = false
FOR country IN OBJECT_NAMES(t.metadata.configurations)
    when t.metadata.configurations.[country].enabled = true
    and array_contains(t.invalidityReasons.[country], 'ANCESTOR_DEACTIVATED_OR_INVALID') end;

Couchbase 宣布突变,但我的国家/地区仍处于激活状态

你有什么想法吗:

  • 如果 N1QL 甚至可以做到这一点?
  • 我做错了什么? :)

顺便说一下,我使用的是 Couchbase EE 5.1.1

谢谢, 干杯,

朱尔斯

【问题讨论】:

    标签: couchbase n1ql


    【解决方案1】:

    它应该工作。以下在单个文档上正常工作。

    insert into default values("11",{ "invalidityReasons": { "AU": [ "ANCESTOR_DEACTIVATED_OR_INVALID" ], "BE": [ "ANCESTOR_DEACTIVATED_OR_INVALID" ], "BG": [] }, "metadata": { "configurations": { "AU": { "enabled": true }, "BE": { "enabled": false }, "BG": { "enabled": true } } } } );
    SELECT * FROM default USE KEYS "11";
    update `default` t USE KEYS "11"
    SET  t.metadata.configurations.[country].enabled = false
    FOR country IN OBJECT_NAMES(t.metadata.configurations)
        when t.metadata.configurations.[country].enabled = true
        and array_contains(t.invalidityReasons.[country], 'ANCESTOR_DEACTIVATED_OR_INVALID') end;
    SELECT * FROM default USE KEYS "11";
    

    【讨论】:

    • 非常感谢 vsr,看起来“使用密钥”是成功的关键,干杯,朱尔斯
    • USE KEYS 只是示例。可以根据谓词更新多个文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2021-05-21
    • 1970-01-01
    • 2020-02-21
    • 2020-03-05
    • 1970-01-01
    相关资源
    最近更新 更多