中嵌入文檔匹配{「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做的事情。
感謝Marc提供了這樣的幫助。 – Echo 2012-04-12 00:56:23