如何克隆一个BSON文档(类似于Json)?
How to make a clone of a BSON Document (similar to Json)?
对于我的项目,我将在新用户注册时创建一个新的 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() 方法,但似乎不存在。
有什么帮助吗?
对于一个简单的文档(如您的示例),只需使用 Document(Map<String, Object>)
构造函数创建一个新文档,因为 Document
恰好是从 Map
.
派生的
Document clonedDoc = new Document(originalDoc);
但是请注意,这只会创建一个新的 "first level",其中所有现有的子文档都将是 相同的 对象,即 不是 原始子文档的副本。
最简单的深度克隆方法是编码到 json 并从那里解析:
Document clonedDoc = Document.parse(originalDoc.toJson());
对于我的项目,我将在新用户注册时创建一个新的 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() 方法,但似乎不存在。
有什么帮助吗?
对于一个简单的文档(如您的示例),只需使用 Document(Map<String, Object>)
构造函数创建一个新文档,因为 Document
恰好是从 Map
.
Document clonedDoc = new Document(originalDoc);
但是请注意,这只会创建一个新的 "first level",其中所有现有的子文档都将是 相同的 对象,即 不是 原始子文档的副本。
最简单的深度克隆方法是编码到 json 并从那里解析:
Document clonedDoc = Document.parse(originalDoc.toJson());