1

私はSpring data MongoTemplateを使用してmongo操作を管理しています。JSONの完全なドキュメントを保存して更新しようとしています(JavaでString.classを使用)。

例:

String content = "{MyId": "1","code":"UG","variables":[1,2,3,4,5]}";
String updatedContent = "{MyId": "1","code":"XX","variables":[6,7,8,9,10]}";

以下を使用して、コードと変数を個別に更新できることを知っています。

Query query = new Query(where("MyId").is("1"));

Update update1 = new Update().set("code", "XX");
getMongoTemplate().upsert(query, update1, collectionId);

Update update2 = new Update().set("variables", "[6,7,8,9,10]");
getMongoTemplate().upsert(query, update2, collectionId);

しかし、私たちのアプリケーション アーキテクチャにより、オブジェクト全体を直接置き換える方が便利な場合があります。私の知る限り:

getMongoTemplate().save(content,collectionId) 
getMongoTemplate().save(updatedContent,collectionId) 

saveOrUpdate 機能を実装していますが、これにより 2 つのオブジェクトが作成され、何も更新されません。

何か足りない?アプローチはありますか?ありがとう

4

1 に答える 1

-1

次のコードを使用できます:

Query query = new Query();
query.addCriteria(Criteria.where("MyId").is("1"));

Update update = new Update();
Iterator<String> iterator = json.keys();
while(iterator.hasNext()) {
    String key = iterator.next();
    if(!key.equals("MyId")) {
        Object value = json.get(key);
        update.set(key, value);
    }
}


mongoTemplate.updateFirst(query, update, entityClass);

keysetjsonから取得する方法は他にもあるかもしれませんが、都合に合わせて使用​​できます。

を使用BasicDbObjectして取得できますkeyset

BasicDbObjectを使用して取得できますmongoTemplate.getConverter()

于 2015-06-19T13:02:59.413 に答える