I have noticed that for some of the update operations (e.g. set), updateFirst/updateMulti needs to be called individually, while others (pop, push, inc) can be chained. E.g.


Code:
Query query = new Query(where("_id").is(person.getId()));

List<String> emails = new ArrayList<String>();
emails.add("aaa@test.sh");
emails.add("aab@test.sh");
emails.add("aac@test.sh");

Update update = new Update();

update.set("firstName", person.getFirstName());
mongoTemplate.updateFirst(query, update);
update.set("lastName", person.getLastName());
mongoTemplate.updateFirst(query, update);
update.set("money", person.getMoney());
mongoTemplate.updateFirst(query, update);
update.set("emails",emails);
mongoTemplate.updateFirst(query, update);
update.set("emailCount",3);
mongoTemplate.updateFirst(query, update);


query = new Query(where("_id").is(person.getId()).and("emailCount").gt(3));
update = new Update();
update.pop("emails", Update.Position.LAST).inc("emailCount", -1);
mongoTemplate.updateFirst(query, update);

String newEmail = "aaz1@test.sh";
query = new Query(where("_id").is(person.getId()));
update = new Update();
update.push("emails", newEmail).inc("emailCount", 1);
mongoTemplate.updateFirst(query, update);
If I try to chain set operations, only the last one succeeds.

Is this expected behavior? If yes, is there a document explaining this?

Thanks