web-dev-qa-db-ja.com

Spring Data MongoDBは複数のフィールドを更新します

Spring-Data-MongoDBでは、1つのクエリでドキュメントの複数のフィールドを更新できますか?.

たとえば、次のmongoクエリを実行できます。

db.customers.update(
  {"firstname": "Max"},
  { 
    $set: {
      "lastname": "Maier",
      "email": "p.maier@example.com"
    }
  }
);

コードと春の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つ(キー、値)のみを受け入れ、複数値または値のリストを受け入れないようです。

5
jchrbrt

Update#setメソッドは1つ(キー、値)のみを受け入れ、複数値または値のリストを受け入れないようです。

はい、一度に1つのキーと値のみを受け入れます。しかし、必要に応じて、多くのキーと値に対してそれを行うことができます。それはマップのようなもので、好きなだけキー(一意)と値を追加できます。

コードを少し拡張するだけです

Query select = Query.query(Criteria.where("firstname").is("Max"));
Update update = new Update();
update.set("lastname", "Maier");
update.set("email", "p.maier@example.com");
UpdateResult updateResult = mongoTemplate.findAndModify(select, update, Customer.class);

findAndModifyメソッドを深く掘り下げると、背後でキーバリューマップを保持していることがわかります。

8
pvpkiran
1
Dewfy