【问题标题】:How to access nested data in firestore and save it in an array如何访问firestore中的嵌套数据并将其保存在数组中
【发布时间】:2021-07-23 01:52:50
【问题描述】:
我在 Firestore 中的数据是这样排列的:
我想要归档的基本上是从每个文档中获取所有“值”,我现在在第二张图片中显示的一个集合中拥有其中的 3 个。我只想下载一次。
结构如下:
聊天室 --> ChatId(1) --> ChatId(2) --> 聊天消息
或者更容易理解:
集合 --> 文档 --> 集合 --> 文档
我想遍历“ChatId(2)”中的所有聊天消息,并从每个“聊天消息”中获取所有“值”并将它们存储在一个数组中。
我在尝试处理如此困难的(至少对我而言)对 firebase 的嵌套调用时遇到了困难,我想在这里寻求帮助。我在 react-native 工作,所以 Javascript 是我在这里使用的语言。
【问题讨论】:
标签:
javascript
reactjs
react-native
google-cloud-firestore
【解决方案1】:
我自己搞定了,我的代码看起来像这样,如果你想复制它:
const loadallmessages = async () => {
await firebase.firestore().collection("chatrooms").doc(`${chatId}`).collection(`${chatId}`).orderBy("timestamp").limit(20).get().then(
querySnapshot => {
allChatMessages = [];
querySnapshot.docs.map(doc => {
allChatMessages.push(doc.data().value);
//console.log("console log inside foreach: ", doc.data().value)
})
console.log(allChatMessages)
})
};
“限制 20”限制了我的查询快照,所以我只收到 20 条消息,因为我按“时间戳”排序,所以我只收到 20 条最新条目。
作为旁注,时间戳条目是我在我的应用程序本身中使用基本 JS 方法执行的操作,以便稍后(谁知道)创建一个要在聊天中显示的时间戳。每次您发送消息时,它都会附加到消息上并与聊天消息本身一起存储。它是这样的:
const timestamp = Date.now()