我想更新数组对象中的一个元素,并仅返回更新后的数组对象中的少数元素。
文档:
{
"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/