我在Couchbase存储桶中包含一些包含对象数组的文档。我正在尝试同时编辑同一文档数组中包含的两个不同对象。
我目前正在运行以下查询来编辑其中一个对象:
UPDATE mydoc SET x.myfield = $1 FOR x IN mydoc.myarray WHEN x.`key` = $2 END;
有没有一种方法可以同时运行这样的几个查询,因为我正在编辑两个不同的子文档?
我看了一下似乎没有提供这种容量的subdoc API,但如果有办法,我很想用它而不是原始的N1QL查询。
我唯一的选择是锁定整个文档,然后在我完成更新后将其解锁?我正在使用GoCB客户端,如果有任何帮助的话。
谢谢 !
WHERE子句控制UPDATE的哪个文档和SET子句控制要更新的内容。您需要WHERE子句以避免不必要的突变。
UPDATE mydoc SET x.myfield = $1 FOR x IN mydoc.myarray WHEN x.`key` = $2 END
WHERE ANY v IN mydoc.myarray SATISFIRS v.`key` = $2 AND v.myfield != $1 END;
上面的语句更新了数组中所有匹配的字段。为什么需要同时更新多个语句。没有限制。但请注意更新文档需要获取,修改和写回。在其他一些线程之间修改CAS会不匹配,错误将返回,你需要处理这种情况。