2016-01-22 3 views
0

У меня есть коллекция (A), которая имеет два поля (String, integer) в mongoDB. Я хочу обновить коллекцию, добавив некоторое значение в stingОбновить данные в mongo Db, используя весну (MongoTemplate)

Ex. Допустим, у меня есть документ A [field1: ABC, field2: 25]. Я хочу обновить его, добавив, скажем, 5, чтобы он выглядел как A [field1: ABC, field2: 30] после обновления.

Код я использовал для этого заключается в следующем:

Query query = new Query(); 
query.addCriteria(Criteria.where("field1").is("ABC)); 
BeanName beanName = template.findOne(query, BeanName.class,collectionName); 
if(null != beanName){ 
    Update update = new Update(); 
    update.set("field1", "ABC"); 
    update.set("field2", beanName.getField2() + 5) 
    template.updateFirst(query, update, BeanName.class,collectionName); 
} 
else{ 
    template.save(beanName, collectionName); // the value of filed1 and field 2 is populated in a bean with instance 'beanName' 
} 

Код woriking отлично с ожидаемыми результатами, но производительность очень медленно. Есть ли другой эффективный способ для этого.

Я работаю над большим объемом данных для обновления.

ответ

0

Я предлагаю вам использовать метод findAndModify() в сочетании с функцией upsert = true. Вы можете найти официальную документацию ниже:

https://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/

+0

Этот метод обыкновение позвольте мне обновлять на существующей стоимости. Есть ли способ сделать это? –

+0

Что это значит? В спецификации указано: «Изменяет и возвращает один документ» –

Смежные вопросы