2012-04-11 52 views
1

JSON對象我有JSON對象:刪除和添加新的數組轉換成使用的MongoDB

{ 「_id」: 「1」, 「_class」: 「com.model.Test」, 「projectList」: [{ 「專案編號」: 「春」, 「resourceIDList」: 「馬克」, 「大衛」]}, { 「專案編號」: 「MongoDB的」, 「resourceIDList」:「NOSA]}

我需要能夠刪除項目「Spring」的resourceIDList並分配新的ResourceIDList。

ResourceIDList只是列出

每當我嘗試使用以下,沒有在DB更新:

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

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

回答

2

中嵌入文檔匹配{「projectList.projectID」:「春」}更換resourceIDList可能在JavaScript shell中完成,如下所示: (我喜歡從JS shell開始,因爲它比Java更簡潔,語法相對簡單。與JS的例子可以被應用到任何語言的驅動程序。)

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

上使用「$」操作員修改嵌入文檔的文檔可以了「$位置操作」的章節中找到了「更新」文件: http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator 有一個在嵌入式文檔的詳細信息‘點表示法(把手伸進對象)’資料: http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29

以上可以在Java驅動程序來完成,像這樣:

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

在上面,「假」表示「UPSERT =假」,和「真」代表「多=真」。這是在文檔中解釋的「更新」命令: http://www.mongodb.org/display/DOCS/Updating#Updating-update%28%29

不幸的是,我不熟悉Spring框架,所以我無法告訴你如何與「mongoOperations」類來做到這一點。希望上面的內容能夠提高你對Mongo中嵌入文檔的更新的理解,並且你將能夠完成你需要用Spring做的事情。

+1

感謝Marc提供了這樣的幫助。 – Echo 2012-04-12 00:56:23

相關問題