Репозиторий Spring Data и MongoDB — как создать запрос на обновление?

У меня есть следующий репозиторий jpa:

   @Query("UPDATE PlayerAccount pa SET pa.password = ?3 WHERE pa.id = ?1 AND pa.password = ?2")
   @Modifying
   public int updatePasswordWithValidation(Long playerAccountId, String oldPasswordDB, String encodePassword);

Теперь я хотел бы реализовать аналогичный запрос на обновление для репозитория mongoDB:

@Query("update( { _id: ObjectId(' $1 ') }, { $set: { messageStatus: $2} })")

Но это не работает. какие-либо ссылки на то, как выглядит настроенное обновление репозитория mongo?

Спасибо


person Urbanleg    schedule 20.07.2014    source источник


Ответы (2)


Язык запросов MongoDB — это язык только для запросов. Таким образом, нет такой вещи, как запрос на обновление. Если вам нужно выполнять специальные обновления с репозиторием Spring Data поверх MongoDB, вам нужен собственный метод реализации.

// Interface for custom functionality
interface SomeCustomRepository {
  void updateMethod(…);
}

// Custom implementation
class FooRepositoryImpl implements SomeCustomRepository {

  public void updateMethod(…) {
    mongoTemplate.update(…);
  }
}

// Core repository declaration combining CRUD functionality and custom stuff
interface FooRepository extends CrudRepository<Foo, ObjectId>, SomeCustomRepository {
  …
}

Этот подход также описан в справочная документация.

person Oliver Drotbohm    schedule 20.07.2014
comment
Привет, Оливер, ссылка 404 - person Madbreaks; 14.03.2019
comment
@Madbreaks это обновление для конкретного выпуска: docs.spring.io/spring-data/mongodb/docs/2.2.5.RELEASE/reference/ - person Sebastian; 15.03.2020

Если вы просто передадите ранее автоматически созданный _id объекта с обновленными значениями объекта, MongoDB «обновит», а не «создаст» новый экземпляр.

person Jehoshuah    schedule 04.02.2015