簡體   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