繁体   English   中英

Firebase Cloud Firestore doc.data().includes or.IndexOf 不起作用

[英]Firebase Cloud Firestore doc.data().includes or .IndexOf doesn't work

我正在尝试使用一个数组,尝试在我存储在云 Firestore 上的数组上运行doc.data().includesdoc.data().indexOf ,该数组是文档中唯一存在的东西。

数据是这样排列的

    0: example@gmail.com
    1: firebase@gmail.com
    2: new@gmail.com

为了得到我刚刚做的数据

firebase.firestore().collection('mails').doc('emails').get().then((doc) => {
            if (doc.exists) {
                console.log(doc.data()); //prints the list of emails in form of array
                doc.data().IndexOf(email); //error IndexOf doesn't exist
                doc.data().includes(email); //error includesOf doesn't exist
            }
            else {
                console.log('data doesn't exist');

            }

        });

Cloud Firestore 数据库视图

要访问doc.data().IndexOfdoc.data().includes或任何其他与数组相关的函数,只需将doc.data()转换为数组,如下所示:

var docArray = Object.values(doc.data());
docArray.includes(stringToSearchFor);

或者

Object.values(doc.data()).includes(stringToSearchFor);

这将允许您运行docArray.includesdocArray.IndexOf 转换的原因是 firebase 返回整个文档,这是一个 object 对象,您可以通过 console.log(doc.data()) 看到这个并查看原型字段。 发生这种情况是因为 firestore 将数组存储为 json object 意味着您看到的数组索引号实际上不是索引号,它们只是 object 键。

意义

0: example@gmail.com
1: firebase@gmail.com
2: new@gmail.com

其中0, 1, 2是索引(或看起来)和example@gmail.com, firebase@gmail.com, new@gmail.com , 2 但实际上是密钥库中的值0, 1, 2他们 fire,不是索引。 因此,要获取键(数字)或值(电子邮件),我们只需运行Object.keys(doc.data())// will return numbersObject.values(doc.data())//will return emails ,你会得到你想要的数组,现在你可以在这个数组上运行操作。

我建议您将数据存储在一个数组中,而不是像您的 Firestore 数据库屏幕截图所示那样作为单独的字段。

您的 Firestore 文档当前包含 6 个不同的字段,并且使用doc.data()您可以检索此文档中的所有 6 个字段作为一个 JavaScript Object:这就是数组方法无法工作的原因。 如果您将此数据存储在一个数组中(即一个数组类型的字段),那就没问题了。

您可以尝试以下代码:

  const docRef = firebase.firestore().collection('mails').doc('emails');

  docRef
    .set({
      mails: ['example@gmail.com', 'firebase@gmail.com', 'new@gmail.com'],
    })
    .then(() => {
      return docRef.get();
    })
    .then((doc) => {
      if (doc.exists) {
        const email = 'example@gmail.com';
        console.log(doc.data().mails); 
        console.log(doc.data().mails.indexOf(email)); 
        console.log(doc.data().mails.includes(email)); 
      }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM