Google cloud firestore 在Firestore上实现多对多关系
我需要在Firestore上建立多对多关系模型。下面是对这些要求的总结Google cloud firestore 在Firestore上实现多对多关系,google-cloud-firestore,many-to-many,Google Cloud Firestore,Many To Many,我需要在Firestore上建立多对多关系模型。下面是对这些要求的总结 一家公司可以为一个项目雇用许多承包商。承包商可以在不同的时间为多家公司的不同项目工作 承包商或公司的数量不应受到限制,即应使用集合或子集合 承包商应能够按公司进行查询;反之亦然,公司应该能够通过承包商进行查询。例如,(1)承包商可能要求提供他/她工作过的公司列表,按项目和时间排序;(2)公司可以要求提供所有在一个月内为其工作的承包商,按项目和承包商排序,可能按周划分 就公司而言,承包商可以改变状态,例如工作、完成。公司
AskFirebase在某些特定情况下,您可以使用子集合,也可以不使用子集合 何时使用子集合: 1) 当您不想在文档中存储大量字段时。CloudFireStore有20000个字段限制。(如果公司和承包商信息非常庞大,可能超过20000个字段) 2) 更新父集合是一项常见操作时。Firestore仅允许您以每秒1次写入的速率更新文档。(如果公司和承包商信息经常被修改) 3) 当您要限制对文档特定字段的访问时。(如果要限制对公司承包商的访问,或者应该限制对承包商公司的访问。在这种情况下,将受限制的字段移动到另一个集合中的另一个文档也是一个好主意!) 不使用子集合时: 1) 当您希望同时查询集合和子集合时。Firestore查询很肤浅。因此,在查询父集合时不会查询子集合,因此必须单独查询它们。(如果您有一个案例可以在一个窗口中显示所有公司及其承包商) 2) 当您在查看集合时希望显示子集合时。(当显示公司时,您可能希望显示其承包商。此处的读取次数将增加,因为不是读取一个文档,而是始终读取一个文档及其子集合) 3) 当您希望同时查询托收和子托收时。(当您希望查询跨公司和承包商的常见事项(如工作领域或最低费率)时,可以使用新发布的托收组查询) 4) 如果您正在考虑查询单个数据段,则应将它们放入集合中。(如果公司通常查询承包商的特定属性,或多个承包商查看公司的详细信息) 我的建议:
Company
用于存储公司信息的集合,可以根据公司的质量对公司进行搜索
Contractors
使用相同的方法收集,因为我假设将根据其属性大量查询承包商
项目
有关公司和承包商将合作的项目信息的子集合。如果只有一家公司正在处理一个项目,则这可以是“公司”集合下的子集合。即使多个承包商将为一家公司处理一个项目,您也可以将承包商的ID存储在项目集合中的数组中。这将帮助您避免每个公司/承包商集合中的项目部分子集合
但是,如果需要查询项目的质量,最好将它们作为单独的父集合公开。我让你来决定
最后,我建议使用一个新的集合合同
,该集合可用于存储公司
、承包商
和项目
之间的关系,以及您可以进行复杂查询的所有信息。如果同一家公司和承包商有两个不同的项目,他们正在工作/合作,那么它可以是合同
集合中的两个文档。当您想要显示一些仪表板时,这很方便。使用这个单一的公司