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

Firebase v8转v9:Stripe Payment Intent相关Firestore代码转换求助

Firebase v8 转 v9 Firestore 代码(Stripe Payment Intent 场景)

正确的v9模块化代码

Firebase v9采用模块化API,你可以通过两种方式实现原v8代码的功能:

写法一(直接拼接路径)

// 先确保导入所需的Firestore方法
import { doc, setDoc } from "firebase/firestore";

// 假设db是已初始化的Firestore实例
await setDoc(
  doc(db, "users", user?.uid, "orders", paymentIntent.id),
  {
    basket: basket,
    amount: paymentIntent.amount,
    created: paymentIntent.created,
  }
);

写法二(分步构建引用)

如果需要更清晰的分步逻辑,可拆分引用创建步骤:

import { doc, setDoc, collection } from "firebase/firestore";

// 1. 获取目标用户的文档引用
const userDocRef = doc(db, "users", user?.uid);
// 2. 获取该用户下的orders集合引用
const ordersCollectionRef = collection(userDocRef, "orders");
// 3. 获取要写入的订单文档引用
const orderDocRef = doc(ordersCollectionRef, paymentIntent.id);

// 写入订单数据
await setDoc(orderDocRef, {
  basket: basket,
  amount: paymentIntent.amount,
  created: paymentIntent.created,
});

你两种尝试写法的问题分析

尝试写法1的问题:

  • collection(db, "users") 获取的是users集合引用,不是单个用户的文档引用
  • getDoc(docRef) 逻辑错误:getDoc用于读取单个文档,不能对集合调用;且此处无需读取文档,仅需构建引用即可,不需要发起读请求
  • paymentRef = collection(docRefId, "orders") 中docRefId是getDoc返回的Promise对象,不是有效的文档引用,无法基于它创建子集合

尝试写法2的问题:

  • doc(collection(db, "users", user?.uid)) 结构错误:collection的参数是交替的集合名和文档ID,collection(db, "users", user?.uid)会被解析为users/{user.uid}路径的集合(不符合你的数据结构),正确做法是先通过doc(db, "users", user?.uid)获取用户文档引用,再基于它创建orders集合引用

内容的提问来源于stack exchange,提问作者Anthon Rodrigues

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:48:23