【问题标题】:Spring Data Mongodb: Updating documentsSpring Data Mongodb:更新文档
【发布时间】:2012-05-18 10:40:24
【问题描述】:

我目前正在尝试弄清楚如何通过 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);

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

【问题讨论】:

标签: spring mongodb


【解决方案1】:

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

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");
}

【讨论】:

    【解决方案2】:

    您可能应该使用 upsert 语义。

    在这篇文章中查看答案:MongoDB and upsert issue

    【讨论】:

      【解决方案3】:

      如果您喜欢使用模板进出实体,只需执行以下操作:

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

      您可能还想查看存储库,因为它们实际上并不要求您制定查询。

      【讨论】:

        猜你喜欢
        • 2012-08-13
        • 1970-01-01
        • 1970-01-01
        • 2015-02-22
        • 2016-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        相关资源
        最近更新 更多