如何使用JavaSDK将嵌套的json对象存储和更新到couchbase中
我使用的是couchbase社区版5.0.1和java客户端2.7.4。我想将以下嵌套json对象存储到couchbase中。如果我想在不影响其他字段的情况下更新同一对象 例如:如何使用JavaSDK将嵌套的json对象存储和更新到couchbase中,java,json,couchbase,java-client,Java,Json,Couchbase,Java Client,我使用的是couchbase社区版5.0.1和java客户端2.7.4。我想将以下嵌套json对象存储到couchbase中。如果我想在不影响其他字段的情况下更新同一对象 例如: 如果我想在玩家对象下再添加一个玩家对象 排列 如果我想再添加一个组,请在组对象数组下显示“Z组” 如何在不影响其他领域的情况下实现这一点 { "doctype": "config:sample", "group": [{ "name": "X 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"
}
]
}
]
}
N1QL在阵列上具有多种操作功能:
在您的例子中,您可以简单地使用ARRAY\u INSERT或ARRAY\u PREPEND查看更新/更新语法(最后一个示例)
如果知道要更新哪些文档ID,可以使用键值子文档API,这通常比通过N1QL进行单个文档更新要快 这将在X组的“玩家”数组末尾添加一个新玩家: 这将向“组”数组添加一个新的组Z:
UPDATE default AS d
SET d.group = ARRAY_APPEND(d.group, {......})
WHERE .....;
UPDATE default AS d
SET g.players = ARRAY_APPEND(g.players, {......}) FOR g IN d.group WHEN g.id = 2 END
WHERE .....;
bucket.mutateIn(docId)
.arrayAppend("group[0].players",
JsonObject.create()
.put("name", "John Smith"))
// ... other player JSON
.execute();
bucket.mutateIn(docId)
.arrayAppend("group",
JsonObject.create()
.put("name", "Z Group"))
// ... other group JSON
.execute();