Couchbase N1q1 更新数组元素并仅返回更新后的 block

标签 couchbase sql++

我想更新数组对象中的一个元素,并仅返回更新后的数组对象中的少数元素。

文档:

{
"doctype" : "report",
"name":"nick",
"emailId":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="056b6c666e343736456268646c692b666a68" rel="noreferrer noopener nofollow">[email protected]</a>",
"subjects" : [{
   "name":"SOA",
   "tutor":"roshan",
   "classes" : "12",
    "mark" : 40,
    "subid": "5678"
 },
 {
   "name":"UNIX",
   "tutor":"mathew",
   "classes" : "9"
    "mark" : 50,
    "subid" : "3788"    
 }
],
"id" : "12345"
}

n1q1:

update bucket1 
   Set i.status = “pass” for i in subjects when i.mark > 40 end
where doctype = "report"
returning *  

上面的查询返回整个文档,但我只想要更新的数组对象中的几个元素,如下所示。你能帮我解决这个问题吗?谢谢

预期查询响应

{
 "id" : "12345",
 "subid: “3788”,
 "name":"UNIX"
}

最佳答案

通过返回子句,您可以构建所需的表达式。 您正在更新 ARRAY,这意味着它可以更新多个元素。因此,如果您希望将 FIRST 元素替换为 ARRAY 和 FIRST,则可以返回 ARRAY。

UPDATE bucket1 AS b
SET i.status = "pass" FOR i IN b.subjects WHEN i.mark > 40 END
WHERE b.doctype = "report" AND (ANY v IN b.subjects SATISFIES v.mark > 40 END)
RETURNING (ARRAY {v.id, v.subid, v.name} FOR v IN b.subjects WHEN v.mark > 40 END) AS subjects;

您只能返回修改后的信息,无法返回原始信息。

关于Couchbase N1q1 更新数组元素并仅返回更新后的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69996827/

相关文章:

couchbase - 如何检查 Couchbase 4.0 服务器是否设置为 "Index"并激活 "Query"(允许 N1QL)

node.js - 如何通过cbq为Couchbase服务器中具有密码认证的存储桶创建索引?

json - N1QL 数组查询 where 条件检查内部元素

couchbase - 由于以下 n1ql 错误,无法执行查询

couchbase - 获取一组 key ?

couchbase - 加入 couchbase 时如何进行正确的索引?

javascript - 为什么 couchbase-sync-gateway 返回 "Failure adding Rev to RevTree"?

java - 如何在自定义 Spring Boot N1QL 查询中使用百分号和 LIKE 来与 Couchbase DB 一起使用

spring-boot - 如何在更新文档后使 Couchbase 缓存失效

沙发底座 N1QL : How to aggregate and join from the same bucket with an array of keys