如何从 React JS 中的 firebase 文档的所有子集合中获取数据? [复制]

Posted

技术标签:

【中文标题】如何从 React JS 中的 firebase 文档的所有子集合中获取数据? [复制]【英文标题】:How to get data from all subcollection of docs of firebase in React JS? [duplicate] 【发布时间】:2021-11-09 14:01:21 【问题描述】:

如何从这个数据库中获取所有订单数据?

这就是我存储数据的方式:

db
    .collection('users')
    .doc(user?.email)
    .collection('orders')
    .doc(paymentIntent.id)
    .set(
        basket: basket,
        amount: paymentIntent.amount,
        created: paymentIntent.created
    )

setSucceeded(true);
setError(null);
setProcessing(false);

【问题讨论】:

【参考方案1】:

使用Collection Group Queries 可能是从collectionGroup() 方法中传递的同名集合中获取所有文档的最简单方法:

db.collectionGroup("orders").get().then((querySnapshot) => 
  console.log(querySnapshot.docs.map(d => (id: d.id, ...d.data())))
)

这将记录所有订单的数组。

【讨论】:

其实你是对的使用collectionGroup更有效。工作项目中过时的 firebase 版本让我大吃一惊,哈哈。 你标记了不正确的人:-) 对不起 xD 我的错?‍♂️【参考方案2】:

您需要获取初始集合快照,然后获取所有子集合。

如果您正在查询特定的doc,您可以立即获得直接查询结果:

const id = 123 // 'replace with whatever user you're trying to query'
const userOrders = await firebase.collection('users').doc(id)
 .collection('orders').get()
 .then(doc => doc.exists ? doc.data() : null)

否则您需要执行两次连续提取

const ordersSnapshot = await firebase.collection('users').get()
const allOrders = await Promise.all(ordersSnapshot.docs.map(async ( id ) => (
  firebase.collection('users').doc(id).collection('orders').get()
    .then(doc => doc.exists ? doc.data() : null)
)))

【讨论】:

useEffect(() => if (user) db .collection('users') .doc(user?.email) .collection('orders') .orderBy('created', 'desc') .onSnapshot(snapshot => ( setOrders(snapshot.docs.map(doc => ( id: doc.id, data: doc.data() ))) )) else([]) , [用户]) 这就是我只为一个文档获取数据的方式,所以现在我应该在我的代码中进行哪些更改以从所有文档中获取数据?

以上是关于如何从 React JS 中的 firebase 文档的所有子集合中获取数据? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 React.JS 中刷新后,如何让用户保持登录到 firebase?

使用 React Native Firebase 时如何远程调试 JS

React Native Firebase:如何显示 Firestore 中的文本?

如何将数据从我的数据库 (Firebase Firestore) 发送到我的 React Native 应用程序?

无法在 React.js 中接收来自 Firebase 的消息

使用 react-redux-firebase 消费云功能 - React JS