Инициализация данных пользователей по умолчанию в Firestore - PullRequest
0 голосов
/ 16 января 2019

Я создаю игру и хочу хранить законченные игровые уровни в firestore для каждого пользователя.

Теперь моя проблема в том, что мне придется один раз инициализировать эти данные - я хочу добавить документ для нового пользователя и pojo, который содержит карту идентификаторов уровней и логическое значение для завершенных / незавершенных.

Так что мне нужно выполнить какую-то логику, например «если документ с таким идентификатором не существует, то добавить этот документ и добавить данные по умолчанию, что означает, что пользователь не прошел ни один уровень» . Есть ли способ, который гарантировал бы, что я должен выполнить эту логику только один раз ? Я хочу избежать какого-либо повторения / повторной попытки, если что-то не получается и так далее, спасибо за ваше предложение

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Типичным подходом к созданию документа, если он еще не существует, является использование транзакции. На основе примера кода в документации по транзакциям :

// Create a reference to the SF doc.
var sfDocRef = db.collection("cities").doc("SF");

return db.runTransaction(function(transaction) {
    // This code may get re-run multiple times if there are conflicts.
    return transaction.get(sfDocRef).then(function(sfDoc) {
        if (!sfDoc.exists) {
            transaction.set(sfDocRef, { count: 1 });
        }
    });
}).then(function() {
    console.log("Transaction successfully committed!");
}).catch(function(error) {
    console.log("Transaction failed: ", error);
});

Также см .:

0 голосов
/ 16 января 2019

Для этого нужна транзакция (обязательно прочитайте связанные документы). В своей транзакции вы можете прочитать документ, чтобы узнать, существует ли он, а затем написать документ, если его нет.

Кроме того, вы можете обойтись без set () с объединением . Операция с объединенным множеством создаст документ, если он не существует, а затем обновит документ указанными вами данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...