[英]Firebase Cloud Firestore doc.data().includes or .IndexOf doesn't work
我正在嘗試使用一個數組,嘗試在我存儲在雲 Firestore 上的數組上運行doc.data().includes
和doc.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');
}
});
要訪問doc.data().IndexOf
或doc.data().includes
或任何其他與數組相關的函數,只需將doc.data()
轉換為數組,如下所示:
var docArray = Object.values(doc.data());
docArray.includes(stringToSearchFor);
或者
Object.values(doc.data()).includes(stringToSearchFor);
這將允許您運行docArray.includes
和docArray.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 numbers
或Object.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.