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

Flutter中如何将交易数组存储到Firebase的子集合?

解决方案:将分类与交易数据分别存入Firebase Firestore集合与子集合

要实现你的需求,需要分两步处理:先将分类信息写入父集合TransactionCategory,再把对应分类下的交易数据写入该分类文档的子集合Transactions。以下是完整的实现代码:

Button(
  title: 'save Categories',
  onPressed: () async {
    final _db = FirebaseFirestore.instance;
    
    // 遍历所有分类
    for (var category in transactionCategoryList) {
      // 1. 写入父集合文档:存储分类id和name
      await _db.collection('TransactionCategory').doc(category.id).set({
        'id': category.id,
        'name': category.name,
        // 不包含transactions字段,因为要存在子集合
      });

      // 2. 遍历当前分类下的交易,写入子集合Transactions
      for (var transaction in category.transactions) {
        await _db
            .collection('TransactionCategory')
            .doc(category.id)
            .collection('Transactions')
            .doc(transaction.id)
            .set({
          'id': transaction.id,
          'title': transaction.title,
          'amount': transaction.amount,
        });
      }
    }

    // 可选:提示保存完成
    print('所有数据已成功存入Firestore');
  },
),

关键说明:

  • 父集合TransactionCategory中的每个文档以分类的id作为文档ID,确保数据唯一性
  • 子集合Transactions隶属于对应分类的文档下,每个交易文档以交易的id作为文档ID
  • 使用await确保每个操作完成后再执行下一步,避免数据写入顺序混乱

如果你的Transaction和TransactionCategory模型类有toJson()方法,可以简化代码,比如:

// 写入分类时用:
await _db.collection('TransactionCategory').doc(category.id).set(category.toJson());
// 注意toJson()方法不要包含transactions字段

// 写入交易时用:
await _db
    .collection('TransactionCategory')
    .doc(category.id)
    .collection('Transactions')
    .doc(transaction.id)
    .set(transaction.toJson());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:42:28