BiJ*_*BiJ 5 mongodb spring-data
在我的数据库中,我有一个看起来像这样的文档
{
"_id" : ObjectId("5864ddd8e38112fd70b89893"),
"_class" : "com.apic.models.UserReg",
"name" : "Bijay",
"email" : "apic.apps@gmail.com",
"psd" : "16d932a5a3da90cc6afd831016b5a6821f0badf7e2c624159205924433613c3a",
"activationToken" : "fe8376ea2dbdf61ebc0f11a2361d741ba3178362d5bf876cf47e6a126bc5b39c",
"verified" : false
}
Run Code Online (Sandbox Code Playgroud)
我也有一个看起来像这样的豆子
public class User {
@Id
private int id;
private String name;
private String email;
// getter/setter methods
}
Run Code Online (Sandbox Code Playgroud)
因此,当我尝试调用save()方法时MongoOperations,它会替换所有缺少的属性,如psd,verified和activationToken.
mongoOperations.save(user, COLLECTION);
Run Code Online (Sandbox Code Playgroud)
有什么方法可以更新我的模型类中的现有属性并保留其他属性吗?
是的,您可以调用选择性更新
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);
Run Code Online (Sandbox Code Playgroud)
如果要设置任意数量的字段(但不覆盖其他字段),可以向模型添加一个将其转换为a的函数Map.如果你Spring显然Jackson是一个很好的选择.
从那里,您可以删除所有null值,然后将具有值的每个字段添加到$set操作中.
Map<String, Object> objectMap = user.toMap();
objectMap.values().removeIf(Objects::isNull);
Update update = new Update();
objectMap.forEach(update::set);
return mongoOperations.findAndModify(
Query.query(Criteria.where("_id").is(user.getId())), update, User.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3581 次 |
| 最近记录: |