Flutter中如何在集合内文档中创建子集合存储用户购买记录?
用户购买记录存储到用户文档子集合的实现方案
数据结构说明
将购买记录存储到用户文档的子集合中,核心结构如下:
- 根集合:
users(存储用户基础信息) - 用户文档:以用户唯一ID为文档ID(如
user_12345) - 子集合:每个用户文档下创建
purchases子集合,用于单独存储该用户的所有购买记录
各平台代码实现
Web端(JavaScript + Firebase Firestore)
// 假设已完成Firebase App及Firestore初始化 import { getFirestore, doc, collection, addDoc } from "firebase/firestore"; const db = getFirestore(); // 新增用户购买记录 async function addUserPurchase(userId, purchaseData) { try { // 定位到目标用户的purchases子集合 const userPurchasesRef = collection(db, "users", userId, "purchases"); // 写入购买记录,自动添加创建时间 const docRef = await addDoc(userPurchasesRef, { ...purchaseData, createdAt: new Date() }); console.log("购买记录已保存,文档ID:", docRef.id); return docRef.id; } catch (error) { console.error("保存购买记录失败:", error); throw error; } } // 调用示例 addUserPurchase("user_12345", { orderId: "ORD_20240520_001", items: [ { productId: "PROD_001", name: "商品A", price: 99.9, quantity: 1 } ], totalAmount: 99.9, paymentMethod: "微信支付" });
Android端(Kotlin + Firebase Firestore)
import com.google.firebase.firestore.FirebaseFirestore import java.util.* // 新增用户购买记录 fun addUserPurchase(userId: String, purchaseData: HashMap<String, Any>) { val db = FirebaseFirestore.getInstance() // 定位到目标用户的purchases子集合 val userPurchasesRef = db.collection("users").document(userId).collection("purchases") // 追加创建时间字段 purchaseData["createdAt"] = Date() userPurchasesRef.add(purchaseData) .addOnSuccessListener { docRef -> println("购买记录已保存,文档ID: ${docRef.id}") } .addOnFailureListener { error -> println("保存购买记录失败: $error") } } // 调用示例 val purchaseData = hashMapOf( "orderId" to "ORD_20240520_002", "items" to listOf( hashMapOf( "productId" to "PROD_002", "name" to "商品B", "price" to 199.9, "quantity" to 2 ) ), "totalAmount" to 399.8, "paymentMethod" to "支付宝" ) addUserPurchase("user_12345", purchaseData)
iOS端(Swift + Firebase Firestore)
import FirebaseFirestore // 新增用户购买记录 func addUserPurchase(userId: String, purchaseData: [String: Any]) { let db = Firestore.firestore() // 定位到目标用户的purchases子集合 let userPurchasesRef = db.collection("users").document(userId).collection("purchases") var mutablePurchaseData = purchaseData // 追加创建时间字段 mutablePurchaseData["createdAt"] = Timestamp(date: Date()) userPurchasesRef.addDocument(data: mutablePurchaseData) { error in if let error = error { print("保存购买记录失败: \(error)") } else { print("购买记录已保存") } } } // 调用示例 let purchaseData: [String: Any] = [ "orderId": "ORD_20240520_003", "items": [ ["productId": "PROD_003", "name": "商品C", "price": 49.9, "quantity": 3] ], "totalAmount": 149.7, "paymentMethod": "银行卡支付" ] addUserPurchase(userId: "user_12345", purchaseData: purchaseData)
关键注意事项
- 用户ID准确性:务必使用当前登录用户的唯一标识(如Firebase Auth的
currentUser?.uid),避免将记录存错用户文档。 - Firestore权限配置:在Firebase控制台设置规则,确保用户仅能读写自己的购买记录:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{userId}/{document=**} { allow read, write: if request.auth != null && request.auth.uid == userId; } } } - 字段扩展:可根据业务需求添加订单状态、物流信息等自定义字段。
内容的提问来源于stack exchange,提问作者sams
相关产品推荐
相关产品推荐

