Как сохранить массив в firebase, используя Angular - PullRequest
0 голосов
/ 21 января 2020

Мне нужно хранить Array в Firebase, используя Angular. Я не могу этого достичь. Пожалуйста, помогите. Что я получаю, это: What I am getting

что я хочу это:

-|bucketList
    |-zjSaw3efefsfsdffg
       0-| bItem: 'thailand'
         | isCompleted: false

       1-| bItem: kasar devi
         | isCompleted: false

и так далее

Я делаю это :

 const bucketRef = this.angularFireDb.list('/bucketList/' + uid );
 bucketRef.push(bucketListItems);

Ответы [ 2 ]

1 голос
/ 21 января 2020

Используя push(), вы создаете новый узел с идентификатором, который автоматически генерируется Firebase (-Lz6G...).

Если вы хотите написать узел с идентификатором что вы генерируете (0, 1, 2 в вашем случае), вам придется использовать метод set().

Проблема, с которой вы можете столкнуться в вашем случае (поскольку вы создаете объекты типа {bItem: this.bucketListItem, isCompleted: false} один за другим ), вы не знаете, какой последний идентификатор присутствует в базе данных. Таким образом, вам придется запросить базу данных, чтобы найти значение последнего идентификатора и увеличить его (предпочтительно через транзакция ).

Или, если вы можете создать объекты в одном Пакетно, используя массив объектов, как показано ниже, идентификаторы узла будут следовать последовательности 0, 1, 2.

Вы можете попробовать следующее:

  var bucketListItems = [
    { bItem: 'Item1', isCompleted: false },
    { bItem: 'Item2', isCompleted: false }
  ];

  const bucketRef = this.angularFireDb.list('/bucketList/');

  bucketRef.set(uid, bucketListItems);
0 голосов
/ 21 января 2020

Я кое-что попробовал и что-то понял. Разместите его так, чтобы он мог помочь любому, кто ищет ту же вещь.

В моем компоненте я сначала помещаю объект в массив, а затем отправляю этот массив в службу

      this.bucketListArray.push({bItem: this.bucketListItem, isCompleted: false});
      this.authService.saveUserBucketListInDb(this.bucketListArray);

In мой сервис, которым я занимаюсь:

saveUserBucketListInDb(bucketListItems: Array<object> ) {

this.angularFireDb.object('/bucketList/' + uid).set({
  bucketListItems
});

}

, что в конечном итоге дало мне то, что я искал, то есть: Array stored in database

Спасибо.

...