【问题标题】:Question about storing data in arrays in firestore关于在firestore中将数据存储在数组中的问题
【发布时间】:2020-04-07 07:21:44
【问题描述】:

所以现在我目前正在存储带有数字的数据,例如 EmailSubject1、EmailSubject2 等,这显然是一种愚蠢的做事方式。

我希望将它们存储在诸如 EmailSubject[1]、EmailSubject[2] 等数组中。

我花了一些时间查看 firebase 文档并在线搜索,但一直在努力寻找解决方案,而且我个人不熟悉以这种方式将东西存储在 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 个主要的 EmailSubject、EmailBody、EmailFrom、EmailDate。然后在其中的每一个内部,EmailSubject[1]、EmailSubject[2] 等,因为它循环并不断添加数据。那有意义吗?我存储了许多电子邮件,这些都是我从它们中存储的东西。 @RenaudTarnec 那我就知道 EmailSubject[1] 和 EmailFrom[1] 在一起了。
  • 查看答案。请注意,Array 的索引从 0 开始。

标签: firebase google-cloud-firestore


【解决方案1】:

如果我正确理解了您的问题,您可以使用arrayUnion() 将元素添加到不同的数组中,但您应该注意,此方法只会添加尚未存在的元素。。 p>

因此,如果您确定只添加新数据,则可以执行以下操作:

  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);

相反,如果其中一个数组中存在相似的值,则需要在客户端中读取数组,推送新值并写回整个数组。

例如:如果您的EmailFrom 数组是['john@gmail.com', 'jack@gmail.com', 'john@gmail.com'],则arrayUnion() 将不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    相关资源
    最近更新 更多