Couchbase N1QL更新数组元素后仅返回更新块指定字段方法
解决方案
调整后N1QL语句
UPDATE bucket1 b SET i.status = "pass" FOR i IN b.subjects WHEN i.mark > 40 END WHERE b.doctype = "report" RETURNING b.id AS id, FIRST s.subid FOR s IN b.subjects WHEN s.mark > 40 END AS subid, FIRST s.name FOR s IN b.subjects WHEN s.mark > 40 END AS name;
调整说明
- 替换了原语句中RETURNING后的全量通配符
*,改为显式指定需要返回的字段,避免返回完整文档内容 - 使用N1QL内置的
FIRST函数,直接从更新后的subjects数组中匹配满足mark > 40条件的元素,提取对应subid和name字段,适配单条匹配的场景 - 注意原语句中的中文引号
“pass”需要替换为英文引号"pass",否则会触发语法错误 - 如果存在多门科目满足
mark > 40的场景,可以调整RETURNING逻辑为数组构造,返回所有匹配科目的信息
执行上述语句后,返回结果和你期望的格式完全一致。
内容的提问来源于stack exchange,提问作者Naveen
相关产品推荐
相关产品推荐

