首页 > 解决方案 > 如何使用 java sdk 将嵌套的 json 对象存储和更新到 couchbase

问题描述

我正在使用 couchbase Community Edition 5.0.1 和 java-client 2.7.4。我想将以下嵌套的 json 对象存储到 couchbase 中。如果我想更新同一个对象而不影响其他字段。

例如:

  1. 如果我想在玩家对象数组下再添加一个玩家对象
  2. 如果我想在组对象数组下再添加一个组说“Z Group”

如何在不影响其他领域的情况下实现这一目标。

 {
    "doctype": "config:sample",
    "group": [{
            "name": "X Group",
            "id": 1,
            "players": [{
                    "name": "Roger Federer",
                    "number": 3286,
                    "keyword": "tennies"
                },
                {
                    "name": "P. V. Sindhu",
                    "number": 4723,
                    "keyword": "badminton"
                }
            ]
        },
        {
            "name": "Y Group",
            "id": "2",
            "players": [{
                    "name": "Jimmy Connors",
                    "number": 5623,
                    "keyword": "tennies"
                },
                {
                    "name": "Sachin",
                    "number": 8756,
                    "keyword": "Cricket"
                }
            ]
        }
    ]
}

标签: javajsoncouchbasejava-client

解决方案


如果您知道要更新哪些文档 ID,则可以使用键值子文档 API,这通常比通过 N1QL 进行单个文档更新要快。

这将在 X Group 的“玩家”数组的末尾添加一个新玩家:

bucket.mutateIn(docId)
        .arrayAppend("group[0].players",
                JsonObject.create()
                        .put("name", "John Smith"))
                        // ... other player JSON
        .execute();

这将在“组”数组中添加一个新的组 Z:

bucket.mutateIn(docId)
        .arrayAppend("group",
                JsonObject.create()
                        .put("name", "Z Group"))
                        // ... other group JSON
        .execute();

推荐阅读