【问题标题】:Firebase firestore how to get reference data without additional request?Firebase firestore 如何在没有额外请求的情况下获取参考数据?
【发布时间】:2018-06-03 21:33:45
【问题描述】:

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

【问题讨论】:

  • 您需要从代码中显式加载这些引用。另见stackoverflow.com/a/46570119/209103
  • 我也有同样的问题。当我获取原始文档时,我正在寻找一种“填充”类型的选项,因此内部参考字段是预先填充的。如果有人能指出我们正确的方向,那将非常有帮助!

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


【解决方案1】:

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

这是我制作的一个示例,其中我的集合 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

【讨论】:

    猜你喜欢
    • 2022-07-01
    • 2022-01-22
    • 1970-01-01
    • 2020-04-13
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多