У меня проблема с обновлением определенных свойств массива объектов в базе данных реального времени в Firebase.
Мой объект выглядит следующим образом (см. рисунок).
Теперь я хочу обновить свойство IsComing второго объекта-участника.
На данный момент я использую функцию updateIsComming(), но это не очень убедительно, потому что мне нужно переписать весь объект.
function updateIsComming() {
const db = getDatabase();
update(ref(db, " your_path/EventModel/" + modelkey ), {
Location: "London",
Participants: [
{ Name: "Bella2", IsComming: "true" },
{ Name: "Tom", IsComing: "true" },
],
});
Вместо этого я просто хочу сослаться на конкретную опору из этого массива. Например
Участник[1].IsComming = false;
Есть ли способ напрямую получить доступ к определенному массиву объекта.
Массивы как структура данных не рекомендуются в базе данных Firebase Realtime. Чтобы узнать почему, я рекомендую прочитать Лучшие практики: массивы в Firebase.
Одна из причин этого заключается в том, что вам нужно прочитать массив, чтобы определить индекс элемента для обновления. Шаблон:
Как вы уже поняли, это не идеально. Как это часто бывает в базах данных NoSQL, рассмотрите альтернативную структуру данных, которая лучше подходит для конкретного случая использования.
В этом случае следует рассмотреть альтернативную структуру данных:
Participants: {
"Bella2": true,
"Tom": true
}
Там мы используем имя участника в качестве ключа, что означает:
update(db, "your_path/EventModel/" + modelkey + "/Participants/Tom", false)
.В этом случае структура будет выглядеть так Participants: { Bella2: { IsComing: "true", PhoneNumber: "12345" }, Tom: { IsComing: "false", PhoneNumber: "123456" }, }
Но как я могу обновить статус пользователя?
И что, если у меня есть участники с таким же именем? В этом случае лучше использовать индивидуальный ключ, верно?
1) Вы можете хранить объект, а не просто true
, например. "Tom": { IsComing: true, etc }
. Затем обновление становится update(db, "your_path/EventModel/" + modelkey + "/Participants/Tom/Iscoming", false)
--- 3) Если у вас есть несколько участников с одним и тем же именем, у вас будет та же проблема в вашей текущей структуре данных: если Tom
хочет обновить свой статус IsComing
, как вы узнаете, для кого Tom
сделать так? --- Смотрите также Что делать, когда кто-то отвечает на мой вопрос?
Что делать, если у моих участников есть более двух свойств, например, Имя, Приходит, Телефонный номер и т. д. В этом случае, что было бы лучшей структурой данных?