从 CouchDB 中的数组中删除一个项目

Removing an item from an array in CouchDB

我想做的是更新一个文档,它有这个模式:

{
    "_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 ...}
  ]
}

我想要实现的是从此文档中删除或添加一个 "project"。我尝试使用 LightCouch Java API and Ektorp,但两者都没有提供这样做的方法(这是可以理解的)。

到目前为止,我找到的唯一方法是获取文档、获取其内容、手动删除数组并更新此文档。老实说,它的效果不是很好。问题是,当我将文档作为字符串获取时,我无法将更改插入其中(例如删除项目)并更新它(最麻烦的部分是更新对我来说)。

所以我有两个问题: - 有没有办法更简单地做到这一点? - 如何 remove/add 来自 Json 数组的项目并更新我的文档?

我是这些技术的新手,正在尝试解决问题,但我认为在使用这些 Java API 时,我在理解序列化/反序列化概念时遇到了问题。

提前谢谢你。

快速浏览一下 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);