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