jch*_*brt 5 spring mongodb spring-data-mongodb
Spring-Data-MongoDB是否可以通过一个查询来更新文档的多个字段。
例如,我可以运行以下mongo查询:
db.customers.update(
{"firstname": "Max"},
{
$set: {
"lastname": "Maier",
"email": "p.maier@example.com"
}
}
);
Run Code Online (Sandbox Code Playgroud)
我们如何用代码和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);
Run Code Online (Sandbox Code Playgroud)
似乎Update#set方法仅接受一个(键,值),并且不接受任何多值或值列表。
似乎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);
Run Code Online (Sandbox Code Playgroud)
如果深入研究findAndModify方法,您可以了解幕后是否持有键值图。
在我的版本中 findAndModifiy 不返回 UpdateResult。我必须使用 updateMulti 方法
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.updateMulti(select, update, Customer.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4753 次 |
| 最近记录: |