使用MongoDB删除并添加新数组到JSON对象中

时间:2012-04-11 20:37:01

标签: java json spring mongodb

我有JSON对象:

  

{“_ id”:“1”,“_ class”:“com.model.Test”,“projectList”:[{   “projectID”:“Spring”,“resourceIDList”:[“Mark”,“David”]},   {“projectID”:“MongoDB”,“resourceIDList”:[“Nosa]}

我需要能够删除Project“Spring”的resourceIDList并分配一个新的ResourceIDList。

ResourceIDList只是List

每当我尝试使用以下内容时,DB上都不会更新任何内容:

 Query query = new Query(where("_id").is("1").and("projectID").is("Spring"));    

 mongoOperations.updateMulti( query,new Update().set("ressourceIDList",  populateResources()), Test.class);

1 个答案:

答案 0 :(得分:2)

替换匹配{“projectList.projectID”:“Spring”}的嵌入式文档中的resourceIDList可以在JavaScript shell中完成,如下所示: (我喜欢从JS shell开始,因为它比Java简洁,语法相对简单。然后JS的示例可以应用于任何语言驱动程序。)

> db.collection.update({_id:"1", "projectList.projectID":"Spring"}, {$set:{"projectList.$.resourceIDList":["Something", "new"]}})

使用“$”运算符修改嵌入文档的文档可以在“更新”文档的“$ location operator”部分找到: http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator 有关嵌入式文档的更多信息,请参见“Dot Notation(Reaching into Objects)”文档: http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29

以上内容可以在Java Driver中完成,如下所示:

Mongo m = new Mongo("localhost", 27017);
DB db = m.getDB("test");
DBCollection myColl = db.getCollection("collection");
ArrayList<String> newResourceIDList = new ArrayList<String>();
newResourceIDList.add("Something");
newResourceIDList.add("new");
BasicDBObject myQuery = new BasicDBObject("_id", "1");
myQuery.put("projectList.projectID", "Spring");
BasicDBObject myUpdate = new BasicDBObject("$set", new BasicDBObject("projectList.$.resourceIDList", newResourceIDList));
myColl.update(myQuery, myUpdate);
System.out.println(myColl.findOne().toString());

如果您有多个匹配{“projectList.projectID”:“Spring”}的文档,您可以使用multi = true选项一次更新它们。使用Java驱动程序,它看起来像这样:

myColl.update(myQuery, myUpdate, false, true);

在上文中,“false”表示“upsert = false”,“true”表示“multi = true”。有关“更新”命令的文档中对此进行了说明: http://www.mongodb.org/display/DOCS/Updating#Updating-update%28%29

不幸的是,我不熟悉Spring框架,因此我无法告诉您如何使用“mongoOperations”类来完成此操作。希望以上内容能够帮助您更好地理解Mongo中嵌入式文档的更新方式,并且您将能够完成Spring所需的操作。