Я новичок в mongodb и изо всех сил пытаюсь понять, как работает обновление документа. У меня есть документ, который называется «меню»:Spring Mongodb findandModify не обновляет весь документ
{
"someId":"id123",
"someProperty":"property123",
"list" : [{
"innerProperty":"property423"
}]
}
, отображающая к моему лицу:
@Document(collection = "menu")
public class Menu {
@Id
private String id;
private String someid;
private String someProperty;
private List<SomeClass> list;
// accessors
}
, когда я пытаюсь найти и обновить этот документ, как это он не обновляет документ. Он уверен, что не найдет в меню, как она возвращает исходный объект с Id:
@Override
public Menu update(Menu menu) {
Query query = new Query(
Criteria.where("someId").is(menu.getSomeId()));
Update update = Update.update("menu", menu);
return mongoOperations.findAndModify(query, update,
FindAndModifyOptions.options().returnNew(true), Menu.class);
}
Но если я изменить его на это, он работает:
@Override
public Menu update(Menu menu) {
Query query = new Query(
Criteria.where("someId").is(menu.getSomeId()));
Update update = new Update().set("someProperty", menu.getSomeProperty())
.set("list", menu.getList());
return mongoOperations.findAndModify(query, update,
FindAndModifyOptions.options().returnNew(true), Menu.class);
}
мне не очень нравится этот второй метод где каждый элемент документа настроен индивидуально, так как вы можете себе представить, что у меня довольно большой документ и он подвержен ошибкам.
Почему первый метод не работает? И что может быть лучшим подходом к обновлению документа?
В таком случае, как я могу затем обновить весь документ, а не устанавливать индивидуальное свойство? – Rohit
Я не думаю, что весна предоставляет любую оболочку для этого. Я знаю, что Morphia, другой драйвер сопоставления mongo, переносит все свойства со значениями компонента, используя $ each, и отправляет весь ключ свойства & значение как массив в обновлении. – Veeram
Посмотрите, можете ли вы попробовать push или addToSet. Это может сработать, но я сомневаюсь. Обновить обновление = Update.push («меню», меню); – Veeram