Как можно обновить объект в mongoDB по проекции?
Есть класс
class A {
private String id;
private String field1;
private Map<String, Set<String>> field2;
}
У него имеется проекция
class ProjectionA {
private String id;
private Map<String, Set<String>> field2;
}
Получаю все объекты по проекции класса А, изменяю информацию в поле field2 и хочу внести изменения в БД, как можно сохранить все объекты в БД по их проекции?
Ответы (1 шт):
Мне кажется, что Вы не совсем верно реализовали идею работы с проекциями в Spring.
Проекции это конструкт, который используется в MongoDB.
ORM и ODM это инструменты, которые помогают абстрагироваться от конкретной реализации хранилища данных и проектируются таким образом, чтобы мы по-возможности вообще не думали как работает хранилище.
Сделано это для того, чтобы отделить бизнес-логику от логики работы с хранилищем.
Это совершенно разные абстрактные уровни.
И с Вашей стороны, как мне кажется, является ошибкой перенос конструктов MongoDB в бизнес логику приложения.
У Вас уже есть класс A, который описывает документ в коллекции MongoDB.
Если Вам нужно настроить получение только интересующих Вас полей документа, для этого можно использовать класса Query и просто настроить список получаемых и исключенных полей.
Query query = new Query();
query
.fields()
.include("id")
.include("field2")
.exclude("field1")
;
List<A> listOfAClassInstances = mongoTemplate.find(query, A.class);
Таким образом Вы получите нужные Вам данные и для доступа к ним, Вы будете использовать тот же самый класс, что и раньше.
Соответственно и при сохранении данных у Вас проблем в этом случае возникнуть не должно.
А в Вашем случае, насколько я понимаю, Spring будет считать что Вы просто работаете с разными коллекциями.