[英]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.