Search code examples
mongodbspring-data

Partial entity mapping and update with Spring Data MongoDB (MongoOperations)


In my database I have a document that looks like this

{
    "_id" : ObjectId("5864ddd8e38112fd70b89893"),
    "_class" : "com.apic.models.UserReg",
    "name" : "Bijay",
    "email" : "apic.apps@gmail.com",
    "psd" : "16d932a5a3da90cc6afd831016b5a6821f0badf7e2c624159205924433613c3a",
    "activationToken" : "fe8376ea2dbdf61ebc0f11a2361d741ba3178362d5bf876cf47e6a126bc5b39c",
    "verified" : false
}

I also have a bean that looks like this

public class User {
  @Id
  private int id;
  private String name;
  private String email;

  // getter/setter methods

}

So when I try to call save() method of MongoOperations, it replaces all missing properties like psd, verified and activationToken.

mongoOperations.save(user, COLLECTION);

Is there any way where I can update only the existing properties in my models class and leave others as it is?


Solution

  • Yes you can call selective updates

    Query query = new Query(new Criteria("id").is(user.getId()));
    Update update = new Update().set("name", user.getName()).set("email", user.getEmail());
    mongoOperations.updateFirst(query, update, COLLECTION);