我在从Firebase获取聊天web应用程序中的数据时遇到问题。我使用的是Firebase函数和typescript。
我已经在我的聊天对象中存储了一些关于发件人和收件人的信息,如下所示:
chats: {
:chatId: {
users: {
userNames: ["senderName", "recipientName"]
userIds: ["senderId", "recipientId"]
}
}
}
现在,我正试图编写一个函数来检索所有聊天,其中发出请求的用户的userId存储在userIds对象中。
我的打字脚本函数如下所示:
export const getUserChats=functions.https.onRequest((req:PR_UserRequest, res: Response) => {
let chatsData: DocumentData[] = [];
db.collection("chats").where("usersIds", "array-contains", `${req.user?.userId}`).get()
.then((chats) => {
chats.forEach((doc) => chatsData.push(doc.data()))
res.json(chatsData);
})
})
结果:
[]
我正在获取聊天集并使用where方法进行过滤,但它似乎没有创建userIds数组。事实上,该函数返回一个空的";聊天"大堆
预期结果:
{
users: {
userNames: ["senderName", "recipientName"]
userIds: ["senderId", "recipientId"]
}
...other data
}
我应该怎么做才能检索到正确的结果?
提前谢谢。
正如我所看到的,您正试图通过"userIds";这不是你的聊天ID文档中的字段,在firestore中也不可能,因为你只能通过字段进行筛选。所以在这里你只能通过";用户";领域在当前的数据模式中,您唯一能做的就是获取所有聊天并在前端进行过滤。你可以做的另一件事是更改你的模式,使其适合你的用例,即你的聊天ID文档应该有用户字段,这是一个用户ID数组,这样你就可以使用";数组包含";方法,只获取包含此userid 的文档