Java Inc/dec mongotemplate,原子级

Java Inc/dec mongotemplate,原子级,java,mongodb,Java,Mongodb,我正在尝试使用find和modify以原子方式更新文档的一个值,根据我的阅读,该值在同一文档中是原子的。根据我的单元测试,这些值不会被修改 我在Java中使用mongoTemplate,我的代码如下 public OfferConfiguration IncreaseStock(OfferConfiguration offerConfiguration) { Query query = new Query(Criteria.where("_id").is(offerCon

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

我在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);
    }
股票类型为Long,我可以看到,当我在find中使用条件时:

  Query query = new Query(Criteria.where("_id").is(offerId).and("stock").gt(0));
  return mongoTemplate.findOne(query, OfferConfiguration.class);
它只返回库存大于0的值

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

在默认情况下对原始文档进行更新后,将返回原始文档

如果要取回修改过的文档,必须将可选的新选项传递给它。
您似乎已经找到了这样做的方法:将
returnNew(true)
添加到
find和modify
命令中。

是否希望它查询所有值,而不仅仅是大于0的值?如果是这样的话,我想你应该删除
.gt(0)
不,我只想减少库存,如果库存还没有为0,这就是为什么我在我的查询中添加该条件。我不知道如何使用Update()减少值,在任何情况下,IncreaseStock和findandDecreseStock都不起作用,我需要知道我自己发现问题的原因,我必须添加新的FindAndModifyOptions()。returnNew(true)到findAndModify中