Couchbase N1QL:基于另一个属性更新文档属性
我正在努力更新N1QL查询 我的文档如下所示:Couchbase N1QL:基于另一个属性更新文档属性,couchbase,n1ql,Couchbase,N1ql,我正在努力更新N1QL查询 我的文档如下所示: { "invalidityReasons": { "AU": [ "ANCESTOR_DEACTIVATED_OR_INVALID" ], "BE": [ "ANCESTOR_DEACTIVATED_OR_INVALID" ], "BG": [] } "metadata": { "configurations": { "AU": { "enabled": tru
{
"invalidityReasons": {
"AU": [
"ANCESTOR_DEACTIVATED_OR_INVALID"
],
"BE": [
"ANCESTOR_DEACTIVATED_OR_INVALID"
],
"BG": []
}
"metadata": {
"configurations": {
"AU": {
"enabled": true,
},
"BE": {
"enabled": false,
},
"BG": {
"enabled": true,
}
}
}
}
我想做什么:
对于所有具有无效原因“祖先已停用”或“祖先已停用”且已激活(即“已启用”:元数据配置中为true)=>停用此国家/地区(即“已启用”:false)的国家/地区
在上面的例子中,AU(Autralia)应该被停用
我现在的位置
这在我脑海中意味着:
- 去所有国家
- 查找那些无效原因=祖先\u停用\u或\u无效+启用=真的
- 更新激活
更新看起来相当不错,但我无法使其正常工作:
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";
非常感谢vsr,看起来“使用钥匙”是这里成功的关键,干杯,朱尔斯使用钥匙就是一个例子。可以基于谓词更新多个文档。