json - n1ql 查询更新 json 数据数组中的多个参数

标签 json couchbase n1ql

以下是 couchbase 中的示例文档 (userdetails)。

{
"friends": [
  {
    "company": "microsoft",
    "firstname": "criss",
    "lastname": "angel"
  },
  {
    "company": "google",
    "firstname": "captain",
    "lastname": "america"
  }
]}

基于“公司”,我想更改“名字”和“姓氏”

N1ql 查询(更新单个参数(名字))

update default use keys "userdetails" set a.firstname="xyz" for a in friends when a.company="microsoft" end returning friends

以上查询完美运行。
但我正在努力编写更新两个参数(名字,姓氏)的查询

N1ql查询(更新两个参数)

update default use keys "userdetails" set a.firstname="abc",a.lastname="xyz" for a in friends when a.company="microsoft" end returning friends

以上查询仅更新“lastname”。

输出

{
"friends": [
  {
    "company": "microsoft",
    "firstname": "criss",
    "lastname": "xyz"
  },
  {
    "company": "google",
    "firstname": "captain",
    "lastname": "america"
  }
]}

最佳答案

每个 SET 术语都是独立的,因此您可以执行以下操作:

UPDATE default
USE KEYS "userdetails"
SET a.firstname="abc" FOR a IN friends WHEN a.company="microsoft" END,
    a.lastname="xyz" FOR a IN friends WHEN a.company="microsoft" END
RETURNING friends;

为了回答您的评论,以下两种形式避免了双重循环。您可以使用实际数据进行测量,以查看哪种形式的性能最佳。

UPDATE default
USE KEYS "userdetails"
SET friends[i] = {"firstname":"abc", "lastname":"xyz", "company":"microsoft"} FOR i : a IN friends WHEN a.company="microsoft" END
RETURNING friends;

UPDATE default
USE KEYS "userdetails"
SET friends[i] = OBJECT_PUT(OBJECT_PUT(a, "firstname", "abc"), "lastname", "xyz") FOR i : a IN friends WHEN a.company="microsoft" END
RETURNING friends;

关于json - n1ql 查询更新 json 数据数组中的多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37152577/

相关文章:

database - 在 couchbase 查询之间

ruby-on-rails - 将MongoMapper对象中的嵌套对象包含在JSON响应中

javascript - 循环范围 : 1 to 1000 的 Json mustache

php - 将二叉树编码为Json

json - 如何通过命令行或手动将 json 文件数据加载到现有 couchbase 存储桶?

couchbase - 如何在 Couchbase 中更新文档的部分内容

database - 错误 4.5 Expression must be a group key or aggregate

android - 休息 API Android 应用程序

ruby-on-rails - 使用 Couchbase 设计 Rails

java - 在 Couchbase 中调用删除文档(带分页)时的 Spring Data "TimeoutException"