从CouchDB中的数组中删除项

时间:2016-03-15 10:40:23

标签: java arrays json couchdb ektorp

我要做的是更新具有以下模式的文档:

{
    "_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时,我在理解序列化/反序列化概念时遇到了问题。

提前谢谢你。

1 个答案:

答案 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);