Вопрос о хранении данных в массивах в firestore - PullRequest
0 голосов
/ 07 апреля 2020

Так что сейчас я храню данные с номером после него, например EmailSubject1, EmailSubject2 и т. Д. c, что, очевидно, является глупым способом ведения дел.

Вместо этого я хотел бы хранить их в массивах, таких как EmailSubject [1], EmailSubject [2] и т. Д. c.

. Я потратил некоторое время на просмотр документации Firebase и поиск в Интернете, но был изо всех сил пытаюсь найти решение, и я не знаю, как хранить вещи в базе данных персонально.

   let z = 0;
              for (z = 0; z < 20; z++) {
                db.collection("Users")
                  .doc("6IzsLbD4r4R5RXdGB5BQy6xq8Dc2")
                  .set(
                    {
                      ["EmailSubject" + z]: mail.subject,
                      ["EmailBody" + z]: mail.text,
                      ["EmailFrom" + z]: mail.from,
                      ["EmailDate" + z]: newDate,
                    },
                    { merge: true }
                  )

                  .then(() => {
                    console.log("Doc successful");

                    return null;
                  })

                  .catch((error) => {
                    console.error("Error writing doc", error);
                  });
              }


Вот мой код, любая помощь будет принята с благодарностью =]

1 Ответ

1 голос
/ 07 апреля 2020

Если я правильно понимаю ваш вопрос, вы можете использовать arrayUnion() для добавления элементов в различные массивы, но вы должны заметить, что этот метод будет добавлять только элементы, которых еще нет .

Поэтому, если вы уверены, что добавляете только новые данные, вы можете сделать следующее:

  var promises = [];
  var docRef = db
    .collection('Users')
    .doc('6IzsLbD4r4R5RXdGB5BQy6xq8Dc2');

  for (z = 0; z < 20; z++) {
    promises.push(
      docRef.set(
        {
          EmailSubject: firebase.firestore.FieldValue.arrayUnion(
            mail.subject + z
          ),
          EmailBody: firebase.firestore.FieldValue.arrayUnion('text' + z),
          //....
        },
        { merge: true }
      )
    );
  }
  Promise.all(promises);

Если, напротив, есть значения, которые аналогично одному из массивов, вам нужно будет прочитать массив в вашем клиенте, pu sh новое значение и записать обратно весь массив.

Пример: если ваш массив EmailFrom равен ['john@gmail.com', 'jack@gmail.com', 'john@gmail.com'], arrayUnion() не будет работать.

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