2015-06-18 1 views
0

Я использую данные Spring MongoTemplate для управления операциями mongo. Я пытаюсь сохранить & обновление json полных документов (используя String.class в java).сохранение и обновление полного документа json с данными Spring Данные MongoTemplate

Пример:

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, но это создает два объекта, ничего не обновляйте.

Мне ничего не хватает? Любой подход? Благодаря

ответ

0

Вы можете использовать следующий код:

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

Там может быть какой-то другой способ получить keyset из JSON, вы можете использовать в соответствии с вашего удобства.

Вы можете использовать BasicDbObject, чтобы получить keyset.

вы можете получить BasicDbObject используя mongoTemplate.getConverter().

+0

Не могли бы вы объяснить, что такое метод json.keys()? – Emilio

+0

'json.keys()' подарит вам файлы вашего класса. –