You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React JS中如何获取Firebase所有文档下子集合的全量订单数据

我的Firebase数据库结构如下
我的Firebase数据库结构如下

问题

请问我该如何从该数据库中获取所有订单数据?
我的数据存储代码如下:

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);

解答

你当前的数据库结构是users根集合下以用户邮箱作为文档ID,每个用户文档下挂载orders子集合存储对应订单,下面分两种常见场景给出实现代码:

1. 获取单个指定用户的所有订单

如果你只需要拿当前登录用户的全部订单,直接读取对应用户下的orders集合即可:

import { getDocs, query, orderBy } from "firebase/firestore"; 

// 假设user是已登录的用户对象
const userOrdersRef = db.collection('users').doc(user.email).collection('orders');
// 可选:按创建时间倒序排列订单
const q = query(userOrdersRef, orderBy('created', 'desc'));

const querySnapshot = await getDocs(q);
const allOrders = [];
querySnapshot.forEach((doc) => {
  allOrders.push({
    orderId: doc.id,
    ...doc.data()
  });
});
// allOrders数组即为当前用户的所有订单数据

2. 获取平台全部用户的所有订单

如果你需要跨所有用户拉取全站所有订单,需要使用Firebase的集合组查询,使用前需要先在Firebase控制台为orders集合组创建对应的查询索引:

import { getDocs, query, orderBy, collectionGroup } from "firebase/firestore"; 

const allOrdersQuery = query(collectionGroup(db, 'orders'), orderBy('created', 'desc'));
const querySnapshot = await getDocs(allOrdersQuery);
const allPlatformOrders = [];
querySnapshot.forEach((doc) => {
  allPlatformOrders.push({
    orderId: doc.id,
    userEmail: doc.ref.parent.parent.id, // 可获取订单对应用户的邮箱
    ...doc.data()
  });
});
// allPlatformOrders数组即为全站所有用户的订单数据

注意事项

  • 使用集合组查询前必须按照Firebase控制台的提示创建对应索引,否则查询会报错
  • 请确保你的Firebase安全规则已经开放了对应集合的读取权限,避免被权限拦截

内容的提问来源于stack exchange,提问作者Abhi Prajapati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:12:02