【问题标题】:How add data to a map in Firestore document Flutter如何在 Firestore 文档 Flutter 中向地图添加数据
【发布时间】:2020-09-12 14:24:57
【问题描述】:

我正在尝试将键值对添加到 Firestore 文档中的映射映射。您可以看到下面设置的文档。 “账单”映射由代表每个账单的键值对组成。每张账单都由一张地图表示。例如:“Bill 1”由代表项目名称和项目成本的键值对组成。

我想在账单中添加键值对。例如,我想向“Bill 1”添加一个项目,以便它包含“Bacon: 14”和我添加的其他项目。

这是我现在拥有的代码。但是,这段代码只是用我添加的新项目替换了 Bacon。它不会将新值添加到现有地图,只是将整个地图(Bill 1 的内容)替换为新项目和成本。

这是当前代码:

  static Future addItemToBill(GroceryItem groceryItem, double cost) async {

    try{

      final FirebaseUser currentUser = await FirebaseAuth.instance.currentUser();

      int currentBillNumber = await getBillCount(currentUser.uid);

      if(currentBillNumber == 0){
        currentBillNumber = 1;
      }

      final DocumentReference documentReference = usersCollection.document(currentUser.uid);

      await documentReference.updateData({
        "Bills.Bill $currentBillNumber": {
          "${groceryItem.itemName}" : cost
        }
      });

    }catch(error){

    }
  }

Current Code

感谢您的帮助!

【问题讨论】:

  • 在 Stack Overflow 上,不显示代码图像。请编辑问题,并将代码复制到问题中并格式化,以便于阅读、复制和搜索。
  • 感谢您的反馈,我是堆栈溢出的新手。将相应地编辑帖子

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

我想你在每个用户内部创建一个账单集合可能会更好,然后你将拥有一个文档集合(账单),在每个文档(账单)内部创建另一个名为 items 的集合,然后你将有一个文件(项目)列表,我想以后很容易查询。

你应该是这样的:

-collection(users)
--document(user)
---collection(bills)
----document(bill)
-----collection(items)
------document(item)

知道了吗?

【讨论】:

  • 谢谢!我忘记了我可以在文档中包含集合。让我试一试
  • 我认为集合更好,因为您可以在不超过文档大小限制的情况下增加项目列表。
【解决方案2】:

当您调用 updateData 时,Firestore 将始终替换您提供的每个键后面的所有内容。在您的情况下,密钥是“Bills/Bill $currentBillNumber”,它将仅包含您提供的内容,替换给定密钥中已有的内容。

如果您想添加新的东西,您的遗嘱必须足够具体,不会取代其他价值观。

      await documentReference.updateData({
        "Bills.Bill $currentBillNumber.${groceryItem.itemName}": cost
      });

【讨论】:

    【解决方案3】:

    all bills 作为新的最高级别集合,然后在每个帐单文档中使用userUID 作为键怎么样?

    然后,如果您想要单个用户的所有账单:

    db.collection('allBills').
    .whereEqualTo("userUID", currentUser.uid)
    .get()
    

    集合和文档的嵌套更少。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多