我正在学习MongoDB,我遇到了将对象重新保存到数据库的问题。为简单起见,我目前的流程是:
我保存对象的代码如下:
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()
吗?