Сохранить выбранные поля в MongoRepository spring, не затрагивая другие - PullRequest
0 голосов
/ 06 марта 2020

Существует коллекция mon go с множеством вложенных полей. Поскольку было бы слишком утомительно отображать каждый член в классах @Data. Я добавил только те элементы, которые мне нужны для использования

@Data
@Document
public class MyCollection {

    @Id
    private String id;
    String code;
    String code;
}

Мой класс MongoRepository выглядит следующим образом

@ Repository publi c Интерфейс MyCollectionRepository расширяет MongoRepository {

MyCollection findById(String id);

}

Теперь я хочу обновить поле кода в моей коллекции. Поэтому я обновил поле кода в сущности и сделал

myCollection = mongoRepository.findById(1)
myCollection.setCode("newCode")
mongoRepository.save(myCollection)

Теперь проблема в том, что все остальные поля в базе данных, которые я не включил в свою сущность, были удалены.

Как я могу обновить выбранное поле, не затрагивая другие. Я не хочу отображать по отдельности всех членов коллекции в мой класс @Data, так как он слишком большой.

1 Ответ

1 голос
/ 06 марта 2020

Вам необходимо создать собственный репозиторий, и при реализации этого репозитория используйте mongoTemplate для обновления выбранных полей, например:

Query query = Query.query(Criteria.where("id").is(1));
Update update = new Update();
update.set("code", "newCode");

mongoTemplate.updateFirst(query, update, MyCollection.class);

При этом оператор $set MongoDb будет устанавливать только предоставленные поля без изменения других. поля.

...