Spring данные MongoDB обновляют несколько полей - PullRequest
0 голосов
/ 25 июня 2018

Возможно ли с помощью Spring-Data-MongoDB обновить несколько полей документа одним запросом.

Например, я могу выполнить этот запрос монго:

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

Как мы можем добиться этого с помощью кода и Spring MongoTemplate? Например, вот код для обновления одного значения:

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 принимает только один (ключ, значение) и не содержит нескольких значений или списка значений.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Похоже, что метод Update # set принимает только один (ключ, значение) и нет нескольких значений или списка значений.

Да, он принимает только один ключ и значение за раз. Но вы можете сделать это для многих ключей и значений, как вы хотите. Это как карта, вы можете добавить столько ключей (уникальных) и значений, сколько захотите.

Вам просто нужно немного расширить свой код

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, вы сможете понять, что за кулисами он держит карту значений ключей.

0 голосов
/ 25 июня 2018
...