java - Inc/dec mongotemplate,原子地

标签 java mongodb

我正在尝试使用 findAndModify 以原子方式更新文档的一个值,根据我的阅读,这在同一文档中是原子的。根据我的单元测试,这些值没有被修改。

我在 Java 中使用 mongoTemplate,我的代码看起来像

    public OfferConfiguration IncreaseStock(OfferConfiguration offerConfiguration) {
        Query query = new Query(Criteria.where("_id").is(offerConfiguration.getId()));
        Update update = new Update().inc("stock", 1);
        return mongoTemplate.findAndModify(query, update, OfferConfiguration.class);
    }

    public OfferConfiguration findAndDecreaseStock(String offerId ) {
        Query query = new Query(Criteria.where("_id").is(offerId).and("stock").gt(0));
        Update update = new Update().inc("stock", -1);
        return mongoTemplate.findAndModify(query, update, OfferConfiguration.class);
    }

Stock 的类型为 Long,当我在查找中使用条件时可以看到:

  Query query = new Query(Criteria.where("_id").is(offerId).and("stock").gt(0));
  return mongoTemplate.findOne(query, OfferConfiguration.class);

它只返回库存大于 0 的值。

知道我的代码有什么问题吗?

最佳答案

FindAndModify默认情况下,更新后会返回原始文档。

如果您想取回修改后的文档,您必须将可选的 new 选项传递给它。 您似乎已经找到了将 returnNew(true) 添加到 findAndModify 命令的方法。

关于java - Inc/dec mongotemplate,原子地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16019808/

相关文章:

Mongodb查询选择具有给定键的记录

node.js - 从 Mongoose 3.x 升级到 Mongoose 4.x 时如何在模式中使用模式?

java - MongoDB 中的 BasicDBObject 拒绝接受整数值

java - JDK/JRE 源代码与匹配的 JSSE (SSL) 源代码和匹配的可运行 JDK/JRE?

java - 如何在 Set 中添加重复元素?

java - Freemarker 模板中的 JSP 标签

MongoDB/Perl : find_one doesn't return data after unrelated code

php - 将数据插入 MongoDB 中的内部数组

node.js - 为什么我的 jwt token 在背面而不是正面返回 null

java - 如何让Spring Boot的GET返回JSON