我需要搜索所有具有有效个人资料(personProfiles)的人(人)。
我对documentReference有点困惑。
const personsRef = firebase.firestore().collection('persons');
const personsRef = await personsRef.get();
const result = [];
for (let index = 0; index < personsRef.docs.length; index += 1) {
const person = personsRef.docs[index].data();
if (person.personProfile) {
const personProfileRef = await person.personProfile.get();
const personProfileData = personProfileRef.data();
if (personProfileData?.active) {
result.push({ name: person.name });
}
}
}
我的结构:
人
个人资料
答案 0 :(得分:1)
您的代码已经像您在注释中提到的那样正常运行,我做了一些更改,以删除代码的异步部分并将其添加到then()
调用中,并简化了您的部分条件,是我想出的:
const db = firebase.firestore();
const personsRef = db.collection('persons');
personsRef.get().then((snapshot){
snapshot.foreach((document){
const personProfile = document.data().personProfile;
if (personProfile) {
db.collection('personProfile')
.document(personProfile)
.get().then((doc){
const docData = doc.data()
if (docData.active) {
result.push({ name: docData.name });
}
});
}
})
});
注意:正如我在评论中提到的那样,这是假设personProfile
集合的persons
字段已更改为不再包含/personProfile/
,因此您可以直接在第二个get()
中按ID查询。举例来说,您在屏幕截图上共享的文档上只会包含XktK7SdqinS4uwdXCXD0nQ400kB2
的{{1}}。如果由于某种原因无法更改此设置,则必须执行以下操作:
personProfile