0
mongodbが新しく、ドキュメントの更新方法を理解するのに苦労しています。私はそれがドキュメントを更新しません。このように、この文書を検索し、更新しようとするとSpring Mongodb findandModifyがドキュメント全体の更新に失敗する
@Document(collection = "menu")
public class Menu {
@Id
private String id;
private String someid;
private String someProperty;
private List<SomeClass> list;
// accessors
}
:
{
"someId":"id123",
"someProperty":"property123",
"list" : [{
"innerProperty":"property423"
}]
}
私のエンティティにマップ: 私は「メニュー」と呼ばれる文書を持っています。それは確かにそれは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
私は春がそれを行うラッパーを提供しているとは思わない。別のmongoマッピングドライバであるMorphiaが、$ eachを使ってすべてのプロパティをbeanの値でラップし、すべてのプロパティキーと値をupdateの配列として送信することを知っています。 – Veeram
pushまたはaddToSetを試すことができるかどうかを確認してください。それはうまくいくかもしれないが、私は疑う。 Update update = Update.push( "menu"、menu); – Veeram