对于我的项目,我将在新用户注册时创建一个新的BSON文档(用于MongoDB),而不是创建一个新的BSON文档并为每个新用户附加所有默认值(例如,创建一个新的文档,在所有统计信息(例如游戏时间,杀戮,死亡,胜利,失败)后附加0,我决定创建一个包含所有这些默认值的文档模板,希望克隆该模板并插入新的用户名, ID和地址-这样会更有效率。
private static Document getDefaultPlayerDocument() {
Document player = new Document();
player.append(DBKey.PLAYTIME.getKey(), 0);
player.append(DBKey.LASTSEEN.getKey(), "Online");
player.append(DBKey.RANK.getKey(), Group.DEFAULT.asString());
player.append(DBKey.EXPIRY.getKey(), "null");
player.append(DBKey.KILLS.getKey(), 0);
player.append(DBKey.DEATHS.getKey(), 0);
player.append(DBKey.WINS.getKey(), 0);
player.append(DBKey.LOSSES.getKey(), 0);
player.append(DBKey.SCORE.getKey(), 0);
return player;
}
这里是创建默认文档的代码,该文档已存储。
但是,我正在寻找一种在需要时克隆此文档的方法,例如
新用户加入ID:5(称为Archie),创建了模板的克隆,名称更改为Archie,Id更改为5。
我尝试查看.clone()方法,但似乎不存在。
有帮助吗?
答案 0 :(得分:0)
对于简单的文档(例如您的示例),只需使用Document(Map<String, Object>)
构造函数创建一个新文档,因为Document
恰好是从Map
派生的。
Document clonedDoc = new Document(originalDoc);
但是请注意,这只会创建一个新的“第一级”,其中所有现有子文档将是相同对象,即不是原始文档的副本子文档。
深度克隆的最简单方法是编码为json并从那里进行解析:
Document clonedDoc = Document.parse(originalDoc.toJson());