Firebase firestore如何获取参考数据而无需额外请求?

时间:2017-12-21 08:36:55

标签: javascript firebase react-native google-cloud-firestore

当我在下面的屏幕截图中看到我们可以看到的地点时,我需要获取他们的数据,但它是对数据的引用,我可以在没有place.ref.data()等额外请求的情况下获取数据?如果我有30个位置,我应该提出30个请求吗?我使用react native,ref对象的类型为DocumentReference https://rnfirebase.io/docs/v3.1.x/firestore/reference/DocumentReference

http://prntscr.com/hqf33h

1 个答案:

答案 0 :(得分:0)

您需要创建自己的填充方法。

这是我制作的一个示例,其中我的集合 eventSchedule 引用了 events,然后我有一系列事件,我想从每个 eventSchedule 中获取事件......我就是这样做的:


   
    ...
    const docRef = db.collection("eventSchedule").doc(dayName);

    try {
        const doc = await docRef.get();

        if (doc && doc.exists) {
            const eventSchedule = doc.data();

            if (eventSchedule.activeEvents) {
                const activeEventsRefs = eventSchedule.activeEvents;
                eventSchedule.activeEvents = [];

                await activeEventsRefs.reduce(
                    async (promise: any, event: any) => {
                        await promise;
                        const childDoc = await event.get();

                        if (childDoc) {
                           eventSchedule.activeEvents.push(childDoc.data());
                        }
                    },
                    Promise.resolve()
                );
            }
        } else {
            logMessage += `No docs found for eventSchedule for today - ${dayName}`;
        }
    } catch (error) {
        logMessage += `Error getting document ${JSON.stringify(error)}`;
    }

所以我使用reducer来处理promise。它就像一种魅力,是最简单的“手动”方式。

另外,如果你使用 React + Redux + Firebase,你可以检查库 react-redux-firebase 已经实现了很多东西,包括 populate 即,类似于MongoDB 填充和 SQL 连接: http://react-redux-firebase.com/docs/populate.html