Couchbase N1QL:根据另一个属性更新文档属性
Couchbase N1QL: Update document attribute based on another attribute
我正在为 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,
}
}
}
}
我正在尝试做什么:
对于具有 invalidityReason "ANCESTOR_DEACTIVATED_OR_INVALID" 且已激活的 all 个国家/地区(即 "enabled":在 metadata.configurations 中为真)=> 停用此国家(即 "enabled": false)
在上面的示例中,应停用 AU(澳大利亚)
我现在在哪里
这意味着在我的脑海中:
- 去想所有国家
- 找到那些有 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
谢谢,
干杯,
朱尔斯
应该可以。以下在单个文档上正常工作。
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";
我正在为 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,
}
}
}
}
我正在尝试做什么:
对于具有 invalidityReason "ANCESTOR_DEACTIVATED_OR_INVALID" 且已激活的 all 个国家/地区(即 "enabled":在 metadata.configurations 中为真)=> 停用此国家(即 "enabled": false)
在上面的示例中,应停用 AU(澳大利亚)
我现在在哪里
这意味着在我的脑海中:
- 去想所有国家
- 找到那些有 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
谢谢, 干杯,
朱尔斯
应该可以。以下在单个文档上正常工作。
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";