在我的数据库中,我有一个看起来像这样的文档
{
"_id" : ObjectId("5864ddd8e38112fd70b89893"),
"_class" : "com.apic.models.UserReg",
"name" : "Bijay",
"email" : "apic.apps@gmail.com",
"psd" : "16d932a5a3da90cc6afd831016b5a6821f0badf7e2c624159205924433613c3a",
"activationToken" : "fe8376ea2dbdf61ebc0f11a2361d741ba3178362d5bf876cf47e6a126bc5b39c",
"verified" : false
}
我也有一个看起来像这样的bean
public class User {
@Id
private int id;
private String name;
private String email;
// getter/setter methods
}
因此,当我尝试调用save()
的{{1}}方法时,它会替换所有缺少的属性,如psd,verified和activationToken。
MongoOperations
有什么方法可以只更新模型类中的现有属性并保留其他属性吗?
答案 0 :(得分:6)
如果要设置任意数量的字段(但不要覆盖其他字段),可以向模型添加一个函数,将其转换为Map
。如果您Spring
明显Jackson
is a good choice for this。
从那里,您可以删除所有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);
答案 1 :(得分:3)
是的,您可以致电选择性更新
Example:
test2.jsp in server2
<html>
<head><title>First JSP</title></head>
<body>
<a href="http://www.test.com">Try Again</a>
</body>
</html>
答案 2 :(得分:0)
根据@Rossiar的回答,我们可以使用MongoConverter
而不是Jackson
。
Document document = new Document();
mongoOperations.getConverter().write(user, document);
Update update = new Update();
document.forEach(update::set);
return mongoOperations.findAndModify(
Query.query(Criteria.where("_id").is(user.getId())), update, User.class);