2

我想要做的是更新一个具有这种模式的文档:

{
    "_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 时我无法理解序列化/反序列化概念。

先感谢您。

4

1 回答 1

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); 
于 2016-03-15T15:10:47.127 回答