0
저는 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
}
내가 찾아이이 문서를 업데이트하지 않습니다처럼이 문서를 업데이트하려고합니다.
@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);
}
나는이 두 번째 방법은별로 좋아하지 않아요이 ID를 사용하여 원래의 개체를 반환으로 그것은 확실히 메뉴를 찾을 않습니다 여기서 문서의 각 요소는 개별적으로 설정됩니다. 오히려 큰 문서가 있고 오류가 발생하기 쉽습니다.
왜 첫 번째 방법이 작동하지 않습니까? 그리고 문서를 업데이트하는 더 좋은 방법은 무엇일까요?
그렇다면 개별 속성을 설정하는 대신 전체 문서를 어떻게 업데이트 할 수 있습니까? – Rohit
스프링이 그렇게 할 래퍼를 제공하지 않는다고 생각합니다. 다른 mongo 매핑 드라이버 인 Morphia가 $ each를 사용하여 모든 속성을 빈 값으로 래핑하고 모든 속성 키와 값을 업데이트의 배열로 보냅니다. – Veeram
push 또는 addToSet을 시도 할 수 있는지 확인하십시오. 그럴 수도 있지만 의심 스럽네요. 업데이트 업데이트 = Update.push ("메뉴", 메뉴); – Veeram