1

私はJSONオブジェクトを持っています:

{ "_id" : "1", "_class" : "com.model.Test", "projectList" : [ { "projectID" : "Spring", "resourceIDList" : ["Mark","David" ] }, { "projectID" : "MongoDB", "resourceIDList" : ["Nosa ] }

プロジェクト「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);
4

1 に答える 1

2

{"projectList.projectID":"Spring"} に一致する埋め込みドキュメントの resourceIDList を置き換えることは、次のように JavaScript シェルで行うことができます: (Java よりも冗長ではなく、構文がJS を使用した例は、任意の言語ドライバーに適用できます。)

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

「$」演算子を使用して埋め込みドキュメントを変更する方法に関するドキュメントは、「更新」ドキュメントの「$ 位置演算子」セクションにあります: http://www.mongodb.org/display/DOCS/Updating#Updating- %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);

上記の "false" は "upsert = false" を表し、"true" は "multi = true" を表します。これは、「更新」コマンドのドキュメントで説明されています: http://www.mongodb.org/display/DOCS/Updating#Updating-update%28%29

残念ながら、私は Spring フレームワークに詳しくないので、「mongoOperations」クラスでこれを行う方法を説明できません。うまくいけば、上記により、埋め込みドキュメントが Mongo でどのように更新されるかについての理解が深まり、Spring で行う必要があることを達成できるようになります。

于 2012-04-11T21:53:31.853 に答える