Spring Data Mongodb:更新文档

时间:2012-05-09 21:13:05

标签: spring mongodb

我目前正试图弄清楚如何通过Spring Data更新MongoDb中的文档。当然,还有mongoTemplate.updateFirst等等。但请考虑一下:

User u = mongoTemplate.findOne(new Query(Criteria.where("_id").is(s)), User.class);
if (u == null) throw new UsernameNotFoundException("user " + s + " does not exist");
Session.setCurrentUser(u);
mongoTemplate.updateFirst(new Query(Criteria.where("_id").is(s)), new Update().inc("logincount", 1), User.class);

...查询用户,在null抛出异常,如果发现增量logincount为1.完美。但这是正确的方法吗?我是否必须再次查询用户 ?我不能修改对象并重新保存吗?

3 个答案:

答案 0 :(得分:3)

您可以通过执行以下操作来避免额外查询:

WriteResult result = mongoTemplate.updateFirst(new Query(Criteria.where("_id").is(s)), new Update().inc("logincount", 1), User.class);
if (result.getN() != 1) {
   throw new UsernameNotFoundException("user " + s + " does not exist");
}

答案 1 :(得分:1)

您应该使用upsert语义。

请参阅此帖中的答案:MongoDB and upsert issue

答案 2 :(得分:1)

如果您正在使用该模板进行实体操作,请执行以下操作:

User user = template.findOne(query(where("id").is(id)), User.class);
// manipulate object
template.save(user);

您也可能希望查看存储库,因为它们不需要您实际制定查询。