Spring-Data-MongoDBでは、1つのクエリでドキュメントの複数のフィールドを更新できますか?.
たとえば、次のmongoクエリを実行できます。
db.customers.update(
{"firstname": "Max"},
{
$set: {
"lastname": "Maier",
"email": "[email protected]"
}
}
);
コードと春のMongoTemplateでこれを実現するにはどうすればよいですか?たとえば、次のコードは1つの値を更新します。
Query select = Query.query(Criteria.where("firstname").is("Max"));
Update updateValue = Update.update("lastname", "Maier");
UpdateResult updateResult = mongoTemplate.updateFirst(select, updateValue, Customer.class);
Update#setメソッドは1つ(キー、値)のみを受け入れ、複数値または値のリストを受け入れないようです。
Update#setメソッドは1つ(キー、値)のみを受け入れ、複数値または値のリストを受け入れないようです。
はい、一度に1つのキーと値のみを受け入れます。しかし、必要に応じて、多くのキーと値に対してそれを行うことができます。それはマップのようなもので、好きなだけキー(一意)と値を追加できます。
コードを少し拡張するだけです
Query select = Query.query(Criteria.where("firstname").is("Max"));
Update update = new Update();
update.set("lastname", "Maier");
update.set("email", "[email protected]");
UpdateResult updateResult = mongoTemplate.findAndModify(select, update, Customer.class);
findAndModify
メソッドを深く掘り下げると、背後でキーバリューマップを保持していることがわかります。