gpt4 book ai didi

java - 更新 couchbase 服务器 5.1.1 中的文档

转载 作者:太空宇宙 更新时间:2023-11-04 10:09:10 26 4
gpt4 key购买 nike

我正在尝试更新 couchbase 服务器 5.1.1 中的对象。

additionalCodes 是对象列表

Code(String code,String type,LocalDateTime datetime )

我在 couchbase 中的对象是这样的:

{
"code": "code1";
"creationDateTime": 1534852560000,
"additionalCodes": [
{
"code": "code1",
"type": "type1",
"dateTime": 1534772384000
}
]
}

我确实想更新这个对象,例如:

{
"code": "code1";
"creationDateTime": 1534852560000,
"additionalCodes": [
{
"code": "code1",
"type": "type1",
"dateTime": 1534772384000
},
{
"code": "code2",
"type": "type2",
"dateTime": 1534772384000
}
]
}

我正在尝试这个:

JsonDocument doc = bucket.get("ID");
doc.content().put("additionalCodes",new Code(...));
doc = bucket.upsert(doc);

提前致谢

最佳答案

有几种方法可以做到这一点。您可以手动将对象图转换为相应的 Json* 类:

// Code code = new Code(...);
JsonDocument doc = bucket.get("ID");
JsonArray curAddlCodes = doc.content().getArray("additionalCodes");
JsonObject newCode = JsonObject.create()
.put("code", code.code)
.put("type", code.type)
.put("dateTime", code.dateTime.toEpochSecond());
curAddlCodes.add(newCode);
doc = bucket.replace(doc);

或者您可以使用 subdoc API 高效地仅更新 additionalCodes 字段,而无需获取和发送完整文档:

bucket.mutateIn("ID")
.arrayAppend("additionalCodes", newCode)
.execute();

如果您有完整的对象图,例如:

TopLevelCode(String code, LocalDateTime creationDateTime, List<Code> additionalCodes)

那么你还有更多选择。您可以根据需要操作 POJO,然后使用 Jackson 等库将其序列化为 JSON 字符串,并将其存储在 RawJsonDocument 中:

// TopLevelCode tlc = new TopLevelCode(...)
ObjectMapper objectMapper = com.couchbase.client.java.transcoder.JacksonTransformers.MAPPER;
String json = objectMapper.writeValueAsString(tlc);
RawJsonDocument doc = RawJsonDocument.create("ID", json);
bucket.replace(doc);

或者,如果您的对象图是可序列化的,则可以使用 SerializedDocument:

SerializableDocument doc = SerializableDocument.create("ID", tlc);
bucket.replace(doc);

关于java - 更新 couchbase 服务器 5.1.1 中的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52544664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com