使用带有Java驱动程序和MongoDB的replaceOne()方法似乎不会更新现有文档

时间:2015-08-18 12:50:45

标签: java mongodb

我正在学习MongoDB,我遇到了将对象重新保存到数据库的问题。为简单起见,我目前的流程是:

  1. 拉出物品
  2. 对其进行一些不明的更改
  3. 替换数据库中的现有项目(而不是更新属性)
  4. 我保存对象的代码如下:

    Document bson = Documents.create(player.toJSON());
    System.out.println("Saving: " + bson);
    UpdateResult updateResult = Mongos.db().getCollection(COLLECTION_NAME).replaceOne(Filters.eq("_id", player.getId()), bson);
    System.out.println("Upserted: " + updateResult.getUpsertedId());
    System.out.println("Updated: " + updateResult.getModifiedCount());
    System.out.println("Result: " + getOrCreatePlayer(player.getUsername()).toJSON());
    

    getOrCreatePlayer()只需执行基于username的查找,并将Document转换为相应的模型对象。如果我count()集合,我确实有一个对象,并且按用户名查询对象返回具有相同_id属性的Document的事实表明我&# 39; m不小心只是返回一个新实例(并忽略返回的Bson)。

    但我的输出看起来像:

    Saving: Document{{hp=30, x=0, y=0, _id=55d27cff76da4319acb7d982, exp=0, inTent=false, username=craig, ap=30}}
    Upserted: null
    Updated: 0
    Result: {"hp":30,"x":0,"y":0,"_id":"55d27cff76da4319acb7d982","exp":0,"inTent":true,"username":"craig","ap":30}
    

    失败的最直接迹象是inTent没有持久存在。我在文档中没有发现它提到getModifiedCount()对于替换场景是否应该为非零,所以我不确定这是否是第二个线索与否。

    我对该对象能够从JSON阵列序列化/加载自身进行单元测试,因此我确信我不会失去"失去" Java层的属性。

    如果我count()集合,那么对象就在那里。

    我正确使用replaceOne()吗?

0 个答案:

没有答案