Couchbase N1QL:根据其他属性更新文档属性

问题描述 投票:2回答:1

我正在努力使用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中为true)的所有国家/地区=>停用此国家/地区(即“已启用”:false)

在上面的示例中,应停用AU(Autralia)

我现在在哪里

这意味着在我脑海里:

  • 去想所有的国家
  • 找到具有invalidityReasons = 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个回答
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";
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.