MongoTemplate findAndModify получает обновленное количество документов

#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. вместо того, чтобы просто получать количество, нужно ли нам на самом деле получать список всех этих записей или даже поле всех обновленных записей?