Как добавить пользователя в нумерованный массив firebase - PullRequest
0 голосов
/ 10 июня 2018

Я новичок в firebase и пытаюсь добавить пользователя в чат-группу при входе в систему.Моя функция в настоящее время добавляет пользователя к 'members' с помощью childbyautoid, но при этом добавляется ключ ID, сгенерированный в firebase, и ключ с именем uid.

Я хочу создать следующее число в последовательности в качестве ключа, иидентификатор пользователя в качестве значения.

Моя функция в Swift:

let key = self.databaseRef.child("groups").child("-LEf3_zagKHB6qQEbTL7").child("members").childByAutoId().key
let newuser = ["uid": uid]
let childUpdates = ["/members/\(key)": newuser]
self.databaseRef.child("groups").child("-LEf3_zagKHB6qQEbTL7").updateChildValues(childUpdates)

Когда я пытаюсь добавить четвертого члена в группу, это то, что я получаю в Firebase для группы "LEf3_zagKHB6qQEbTL7 "...

{
  "description" : "The Tribe",
  "members" : {
    "0" : "5pw4MkVxKob8nXiHojTl61tQQ822",
    "1" : "FeP6H8H0PyVjMDcqwH3zbY0xAxg2",
    "2" : "ZtcfskmMydQmGIarYyKiuO6cKbh1",
    "-BdfJitm1T_fu1ssXcUY" : {
      "uid" : "dSiUpZfdRpXxE7WQL01T5lOUkfF2"
    }
  },
  "title" : "popupzendo"
}

То, что я ожидаю увидеть, это ...

{
  "description" : "The Tribe",
  "members" : {
    "0" : "5pw4MkVxKob8nXiHojTl61tQQ822",
    "1" : "FeP6H8H0PyVjMDcqwH3zbY0xAxg2",
    "2" : "ZtcfskmMydQmGIarYyKiuO6cKbh1",
    "3" : "dSiUpZfdRpXxE7WQL01T5lOUkfF2"
    }
  },
  "title" : "popupzendo"
}

1 Ответ

0 голосов
/ 11 июня 2018

Если вы хотите последовательно увеличивать индекс, вам сначала нужно прочитать весь массив, определить следующий индекс, установить нового дочернего элемента в этом индексе, а затем записать его обратно.Все это должно произойти в транзакции, чтобы исключить возможность того, что кто-то еще также добавит дочерний элемент в одно и то же время, и они оба получат одинаковый индекс.Это также сразу означает, что операция не будет работать, когда пользователь периодически отключается от сервера.

Если все это звучит сложнее, чем ожидалось, вы можете понять, почему операция push() в Firebase генерирует ключ другого типа.Хотя он намного сложнее, чем последовательный индекс, он обходит все проблемы, упомянутые ранее: он не требует транзакций, не имеет шансов на коллизии и даже не требует подключения пользователя к серверу.

Подробнее о том, почему индексы массивов сложно комбинировать с массовыми многопользовательскими сценариями, читайте в классическом блоге Рекомендации: массивы в Firebase .

Если вы настаиваете на использовании индексов массивовЯ рекомендую проверить эти сообщения:

Подробнее об обработке списков в Firebase в Swift см .:

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