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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:22:43