Couchbase N1QL:基于另一个属性更新文档属性



我正在努力解决update-forN1QL 查询

我的文档如下所示:

{
"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"并被激活的国家/地区(即"启用":在元数据中为 true(=>停用此国家/地区(即"启用":false(

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

我现在在哪里

这意味着在我的脑海中:

  • 去想所有国家
  • 查找无效原因 = ANCESTOR_DEACTIVATED_OR_INVALID + 启用 = 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

谢谢 干杯

朱尔斯

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

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";

最新更新