Почему update () удаляет предыдущие данные дочернего элемента в firebase при отправке нескольких объектов? - PullRequest
1 голос
/ 08 мая 2020

В моей структуре базы данных есть дочерний элемент с именем playerNames. Когда я отправляю данные следующим образом:

firebase.database().ref("games/" + gameId + "/playerNames/").update({[playerName]: 1});

Имя игрока добавляется вместе со значением 1.

Structure

Но когда я отправляю данные следующим образом:

var player = {authId: uid, joinTime: firebase.database.ServerValue.TIMESTAMP, leaveTime: "", name: playerName, status: "1", ticket1: "", ticket2: "", ticket3: "", totalTickets: totalTickets};

var data = {};
data["games/" + gameId + "/players/" + playerId] = player;
data["games/" + gameId + "/playerNames"] = {[playerName]: 1};

firebase.database().ref().update(data);

Предыдущие данные в playerNames перезаписываются.

Structure

Почему так. Я что-то не так делаю?

1 Ответ

2 голосов
/ 08 мая 2020

Это потому, что,

В первом случае вы передаете объект {[playerName]: 1} методу update(), и обновление применяется к "games/" + gameId + "/playerNames/" узлу

while,

Во втором случае вы передаете весь объект data, и обновление применяется к узлу root базы данных (поэтому весь узел "games/" + gameId + "/playerNames/" заменяется).

Вам нужно сделать следующее:

var player = {authId: uid, joinTime: firebase.database.ServerValue.TIMESTAMP, leaveTime: "", name: playerName, status: "1", ticket1: "", ticket2: "", ticket3: "", totalTickets: totalTickets};

var data = {};
data["games/" + gameId + "/players/" + playerId] = player;
data["games/" + gameId + "/playerNames/" + playerName] = 1;

firebase.database().ref().update(data);

Это позволит "нетронутым" все остальные узлы под "games/" + gameId + "/playerNames/".

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