我要做的是更新具有以下模式的文档:
{
"_id":"myObjectId",
"_rev":"4-cf19d80a7315bb7fc72882839d7eccb9",
"properties":
{
"1b5f313d044f7cd4d46f62c96e8e26d68":"9f5afece4144ab5676375335150a9776",
"2f127235e8302fb6fdcbec41f05a059cf":"2190e8ce6a07bd025ea150187a47e11af",
"99927ee3855e87d44c05f1bc881a3726":"359f664a4e43d5dde05a7f7ff41551b7a",
{And so on, that's not the point}
}
,
"projects":[
{ "_id":"project_0","name":"1704e5cafc16e18af2076dc7b640fc9cc" }
,
{ "_id":"project_1","name":"2a69038d0133688518aadf02affe746c3" }
,
{ "_id":"project_2","name":"228854981f9c5d37439b2736cb952444c" }
, {And so on ...}
]
}
我想要实现的是从此文档中删除或添加一个“项目”。我尝试使用LightCouch Java API和Ektorp,但两者都没有提供这样做的方法(这是可以理解的)。
到目前为止,我找到的唯一方法是获取文档,获取内容,手动删除数组并更新此文档。说实话,它工作得不好。问题是,当我将文档作为字符串时,我无法将更改插入其中(例如删除项目)并更新它(最麻烦的部分是更新给我)。
所以我有两个问题: - 有没有办法更简单地做到这一点? - 如何从Json数组中删除/添加项目并更新我的文档?
我是这些技术的新手,我正在努力解决这个问题,但我认为在使用这些Java API时,我在理解序列化/反序列化概念时遇到了问题。
提前谢谢你。
答案 0 :(得分:0)
快速浏览一下LightCouch的文档,你可以很容易地使用JSON进行临时操作。如果您已经拥有代表该文档的Java对象,那么您最好使用它,但是您还没有提到它。
要使用JSON,您可以获得如下文档:
CouchDbClient dbClient = new CouchDbClient();
JsonObject myDoc = dbClient.find(JsonObject.class, "myObjectId");
这是一个com.google.gson.JsonObject
对象。所以你应该能够做到这一点:
JasonArray projects = myDoc.getAsJsonArray("projects");
JsonObject newProject = new JsonObject();
newProject.addProperty("_id", "project_10");
newProject.addProperty("name", "92837402937408237492837");
projects.add(newProject); //add a new entry
project.remove(0); //remove the first entry
然后保存回来:
dbClient.save(myDoc);