#java #mongodb
#java #mongodb
Вопрос:
Я использую MongoTemplate для реализации метода, который может обновлять несколько документов в соответствии с запросом и возвращать обновленное количество документов.
Когда я использовал MySQL, метод update обычно возвращает обновленный счетчик данных по умолчанию, поэтому мне интересно, как я могу получить то же самое в mongo?
Кроме того, используя findAndModify, потому что я хочу, чтобы функция была многопоточной.
Пожалуйста, помогите…
Ответ №1:
findAndModify обновляет только один документ вместо этого в MongoTemplate у нас есть updateMulti, который обновляет несколько документов и возвращает WriteResult, который может сообщить вам, сколько документов было обновлено
/**
* finds the elements based on query and modifies it
*
* @param query
* @param update
* @param clazz
* @return
* @throws MeowException
*/
protected <T> WriteResult modifyAll(final Query query, final Update update, final Class<T> clazz) throws MeowException{
try{
return getMongoTemplate().updateMulti(query, update, clazz);
}catch(Exception ex){
throw new MeowException(ex).withParam("query", query).withParam("update", update).withParam("class", clazz).logToFile("Exception in modifyAll");
}
}
Это может быть вызвано как
WriteResult result = modifyAll(query, update, Kitten.class);
logger.error("document updated count :" result.getN());
Надеюсь, это поможет.
Комментарии:
1. вместо того, чтобы просто получать количество, нужно ли нам на самом деле получать список всех этих записей или даже поле всех обновленных записей?