Firebase v9,无法从嵌套集合获取文档。

3
我感觉在v8中获取子集合更容易,我尝试了两天新的方法但是放弃了。
我正在构建一个简单的React社交媒体应用程序以供学习。每个用户登录后都能够发布一些文本(和图片,但不是现在)。我有一个名为“Users”的主要集合,其中包含用户ID。这些用户中的每一个都有一个名为“Posts”的集合,其中包含所有用户的帖子。
我想访问每个用户的“Post”集合,然后访问帖子,可以通过输入每个用户的UID来实现。
但我只能访问当前用户ID,那么我该怎么做才能访问“Users”集合并获取所有用户并能够访问“Posts”子集合呢?
提示:如果此问题的任何部分不清楚,请见谅,英语不是我的母语,这是我第一次在这里发布。感激任何帮助!

1
你好Vito,欢迎来到StackOverflow。你能否提供一个最小可重现的用户案例并附上你的代码? - Yanis-git
请不要发布您的代码截图或其他文本内容。相反,请发布实际文本,并使用 Stack Overflow 的格式化工具进行标记。 - Frank van Puffelen
3个回答

3

如果您想获取所有用户的帖子,您需要使用collectionGroup查询,可以使用它来获取名为“posts”的所有子集合中的文档。您可以按照下面的方式使用模块化SDK(V9)运行collectionGroup查询:

import { getFirestore, getDocs, collectionGroup } from "firebase/firestore"
const db = getFirestore()

const allPosts = await getDocs(collectionGroup(db, "posts"))

谢谢!我不知道怎么没看到它。 - Vito Medlej
如果您想通过用户ID获取特定用户的所有帖子,该怎么办? - Martin Nordström
@MartinNordström 你可以使用 getDocs(collectionGroup(db, "posts"), where("id", "==", "userId")) - Dharmaraj
抱歉创建这个线程。这是我第一次使用Firebase。这是我正在尝试迁移的V8代码:firestore.collection("users").doc(auth.currentUser.uid)..collection("coworkingSessions").doc(slug);。我感谢能得到的帮助 - Martin Nordström
1
@MartinNordström 只需使用 getDoc(doc(db, 'users', auth.currentUser.uid, 'coworkingSessions', slug)) - Dmitri Lihhatsov

0

我有一个类似于this的结构。

"posts"是一个集合,它包含不同的“用户ID”文档,而“用户ID”包含一个名为“照片”的集合,其中包含不同的文档,这些文档包含有关用户创建的帖子的信息。

为了访问用户的所有帖子,我使用了以下方法:

 const docRef = doc(db, 'posts', auth.currentUser.uid)
 const docSnap = await getDocs(collection(docRef, "photos"))
 docSnap.forEach((doc) => {
    // doc.data() is never undefined for query doc snapshots
    console.log(doc.id, ' => ', doc.data())
 })

-1
const docRef = doc(db, "Users", currentUser.uid);
const docSnap = await getDocs(collection(docRef, "Posts");)

虽然这段代码片段可能解决了问题,但它并没有解释为什么或者如何回答这个问题。请在你的代码中包含一个解释,因为这真的有助于提高你的帖子质量。记住,你正在为未来的读者回答问题,而那些人可能不知道你的代码建议的原因。 - Luca Kiebel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接