如何在Firestore Web V9中获取子集合新创建文档的自动生成ID(JS/React)
实现方案
你使用的是Firestore Web V9 模块化SDK,addDoc 执行成功后会直接返回新创建文档的引用对象,直接从该对象中取id属性即可拿到目标ID,完整实现代码如下:
// Create a new checkout session in the subcollection inside this users document const createCheckoutSession = async () => { const collectionRef = collection(db, 'users', currentUser.uid, 'checkout_sessions'); const payload = { price: 'price_1JvjWLChfN4TVWbYw2LdDXZZ', success_url: window.location.origin, cancel_url: window.location.origin }; // addDoc返回新文档的DocumentReference,直接接收即可 const newDocRef = await addDoc(collectionRef, payload); // 直接获取新文档ID const newDocId = newDocRef.id; console.log('新创建的文档ID:', newDocId); // 后续监听该文档的更新,获取sessionId跳转Stripe(比监听整个集合效率更高) const unsubscribe = onSnapshot(newDocRef, async (snap) => { const data = snap.data(); if (data?.sessionId) { unsubscribe(); // 拿到sessionId后取消监听,避免重复触发 const stripe = await getStripe(); stripe.redirectToCheckout({ sessionId: data.sessionId }); } }); };
补充说明
- 你之前写的V8版本是监听整个集合的快照,这里直接监听新创建的单个文档即可,性能更好也不会触发其他文档的变更回调
- 拿到
sessionId后记得调用取消监听的方法,避免后续文档更新重复触发跳转逻辑 - 代码中用到的
onSnapshot需要从firebase/firestore包中导入,和你之前导入collection、addDoc的来源一致
内容的提问来源于stack exchange,提问作者Ryland King
相关产品推荐
相关产品推荐

