Как сделать клон документа BSON (похож на Json)? - PullRequest
0 голосов
/ 30 декабря 2018

Для моего проекта я буду создавать новый документ 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;
}

Вот код для создания документа по умолчанию, который сохраняется.

Однако я ищу метод для клонирования этого документа, когда я хочу, например,

Новый пользователь присоединяется с идентификатором 5: Арчи, создается клон шаблона,имя изменено на Арчи, а идентификатор изменен на 5.

Я пытался просмотреть методы .clone (), но, похоже, не существует.

Любая помощь?

1 Ответ

0 голосов
/ 30 декабря 2018

Для простого документа (например, вашего примера) просто создайте новый документ с помощью конструктора Document(Map<String, Object>), так как Document происходит от Map.

Document clonedDoc = new Document(originalDoc);

Обратите внимание, чтоэто создаст только новый «первый уровень», где все существующие поддокументы будут одинаковыми объектами, то есть не копией исходного поддокумента.

Самый простой способ глубокого клонирования - это кодирование в json и разбор оттуда:

Document clonedDoc = Document.parse(originalDoc.toJson());
...