如何在documentReference中建立位置?

时间:2020-05-24 21:45:15

标签: javascript google-cloud-firestore

我需要搜索所有具有有效个人资料(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 });
        }

    }

}

我的结构:

enter image description here

个人资料

enter image description here

1 个答案:

答案 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