Firestore:客户和发票,如何建模

时间:2018-06-14 23:29:26

标签: java android firebase google-cloud-firestore

我有以下架构,我不知道如何在Firestore中对其进行建模。

我将有客户和发票。客户“有”发票。我需要能够执行这两个查询:

  • 显示客户有
  • 的发票
  • 更新系统中的所有发票(将布尔属性从true更改为false)。

对此进行建模的正确方法是什么?第一个查询通过拥有一组客户来满足其发票的子集来满足。但是第二个是通过收集所有发票来满足的吗?

感谢任何有经验的帮助

谢谢

2 个答案:

答案 0 :(得分:4)

我还有另一条建议,涉及您创建两个顶级集合,如下所示:

Firestore-root
   |
   --- users (collection)
   |     |
   |     --- userId (documents)
   |          |
   |          --- //user details
   |
   --- invoices (collection)
         |
         --- invoiceId (documents)
              |
              --- yourBooleanProperty: true
              |
              --- userId: true

正如您所看到的,实现此目标的最简单方法是使用一个名为invoices的集合,该集合可以将数据库中的所有发票保存为文档。由于单个发票只能属于单个用户,因此您可以将userId作为属性。要获取与特定用户对应的所有发票,建议您使用以下查询:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
Query query = rootRef.collection("invoices").whereEqualTo(userId, true);

如果您想立即将所有发票的布尔属性从true更改为false,只需使用以下查询:

Query query = rootRef.collection("invoices").whereEqualTo(yourBooleanProperty, true);

答案 1 :(得分:1)

请记住,Firestore使用面向文档的NoSQL模型,类似于MongoDB和CouchDB,这导致了根本不同的数据结构决策。

您可以以关系方式思考此结构,并且可以获得相同的结果。

你已经在这里做过了

  

通过拥有一组客户端来满足第一个查询   他们的发票的子收集。

因此,为了解决您的上一个要求,我将使用所有发票制作一个集合,然后与客户共享当前发票ID的发票,这样您将在第一个查询中包含一个带有ID的子集合,以引用您的所有发票,通过这种方式,您可以参考它们并进行任何您想要查询第一个集合的更改。

让我说明一下他们如何连接

enter image description here