首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Inc/dec mongotemplate,原子

Inc/dec mongotemplate,原子
EN

Stack Overflow用户
提问于 2013-04-16 00:06:40
回答 1查看 1.8K关注 0票数 2

我正在尝试使用findAndModify原子地更新我的文档的一个值,根据我的理解,它在同一文档中是原子的。根据我的单元测试,这些值没有被修改。

我在Java语言中使用mongoTemplate,我的代码看起来像这样

代码语言:javascript
复制
    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类型,当我在find中使用一个条件时,我可以看到:

代码语言:javascript
复制
  Query query = new Query(Criteria.where("_id").is(offerId).and("stock").gt(0));
  return mongoTemplate.findOne(query, OfferConfiguration.class);

它只返回股票大于0的值。

你知道我的代码出了什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-28 08:19:46

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

如果您想取回修改后的文档,则必须向其传递可选的新选项。您似乎已经找到了这样做的方法,即在findAndModify命令中添加returnNew(true)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16019808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档