javascript - Fİrebase 文档参考路径未获取数据
问题描述
我有一个基本的firebase问题,你能帮我吗?
我的firebase是这样的:用户>文档(用户ID)>用户信息和其他收集帖子>文档(帖子文档)>帖子内容等。
现在我有一个collectionGroup:
const postRef = useFirestore().collectionGroup("posts");
const { status, data } = useFirestoreCollection(postRef);
我想回去使用这个集合组。我的意思是现在我们正在收集帖子,但我想回去,所以我想去用户部分。我怎样才能做到这一点?Usign reference.path 可能吗?
我的代码:
{data?.docs?.reverse().map((d, index) => {
return (
<>
<div className="d-flex justify-content-center">
<div className="post__body align-items-center">
<div className="post__header">
<div
className="post__avatar d-flex"
style={{
padding: "10px",
marginLeft: "-10px",
}}
>
<Avatar src={img1} />
<h3 className="profile-post-username">
{console.log(d.ref.path)}{" "}
</h3>
</div>
<div className="post__headerDescription asd">
<div className="">{d.data().content}</div>
</div>
</div>
<img src={d.data().imageURL} alt="" />
<div className="post__footer">
<FavoriteBorder fontSize="medium" />
<Publish fontSize="medium" />
</div>
</div>
</div>
<hr></hr>
</>
);
})}
如果我们看控制台,它会给出:
users/NXh8KBd3OUQA4s8048ADy1KqKn33/posts/riruD1DedJzSmoM
users/AhFDgUrP0oWRNgexbvM6sOuNMAu2/posts/stsMitLGk8VKwHC
现在,使用这些信息,我想获取用户的电子邮件或用户名等。
如果我这样做,它会为用户提供文档 ID:[![在此处输入图像描述][3]][3]
更新代码 v2:现在我创建新的 jsx 文档。它的名称用户信息。这里:
const UserInfos = () => {
const userRef = useFirestore().collection("users");
const { status, data } = useFirestoreCollection(userRef);
return (
<div
className="post__avatar d-flex"
style={{
padding: "10px",
marginLeft: "-10px",
}}
>
<Avatar src={img1} />
<h3 className="profile-post-username">
{data?.docs?.map((index) => index.data().email)}{" "}
</h3>
</div>
);
};
现在,主页代码如下:
{data?.docs?.reverse().map((d, index) => {
return (
<>
<div className="d-flex justify-content-center">
<div className="post__body align-items-center">
<div className="post__header">
<UserInfos/>
<div className="post__headerDescription asd">
<div className="">{d.data().content}</div>
</div>
</div>
<img src={d.data().imageURL} alt="" />
<div className="post__footer">
<FavoriteBorder fontSize="medium" />
<Publish fontSize="medium" />
</div>
</div>
</div>
<hr></hr>
</>
);
})}
解决方案
您正在DocumentReference上寻找parent
属性:
const data = "" // assume this as your querySnapshot
const postUser = data.docs[0].ref.parent.parent
// This should be reference to that post's user.
// To get that user's document
const userDoc = await postUser.get()
要获取帖子的用户信息,您可以编写一个将文档快照作为参数的函数:
async function getUserInfo(reference) {
const userDoc = await reference.parent.parent.get()
return userDoc
}
getUserInfo(d.ref)
理想情况下,我会在获取帖子后立即获取用户文档:
const postRef = useFirestore().collectionGroup("posts");
const data = "" // The querySnapshot
const postDocs = data.docs.map(d => d.data())
const userDocs = await Promise.all(data.docs.map(d => d.ref.parent.parent.get()))
userDocs.forEach((uDoc, i) => {
postDocs[i] = uDoc.data()
// Returned values will be in order of the Promises passed, regardless of completion order in Promise.all()
})
推荐阅读
- android-studio - Android Studio 2020.3.1 - 运行很慢,总是重新构建
- database - 两个数据库之间的一致性
- python - Python3 datetime.datetime(2021, 05, 09) 不支持前导 0,但在 Python 2 中有效
- firebase - Firebase 控制台仅显示过去 30 分钟的参数
- verilog - Verilog:为什么寄存器在同一个时钟周期内同步输入数据?
- javascript - 如果我构建了一个 SPA 并且用户关闭了 JavaScript,会发生什么?
- java - 在三维坐标中画一个圆
- wordpress - ACF 灯箱问题
- c# - Unity - Vector3.MoveTowards 不会以恒定速度移动
- python - 如何抓取生成更新数据表的网页