Firebase Cloud Firestore有多对多关系

Inf*_*tus 18 firebase google-cloud-firestore

如何在多对多关系中构建和查询Firebase Cloud Firestore中的数据?

我有公司和承包商.承包商可以为多个公司工作,公司可以拥有多个承包商.这是一个简单的多对多关系.我希望能够回答有关公司和承包商的问题:

鉴于一家公司,谁是现有的承包商.鉴于承包商他们为公司工作的是什么.在Cloud Firestore中构建数据的正确方法是什么?

小智 6

您可以将“承包商”项目的地图字段作为公司密钥,并且其值可以是真实的,也可以是时间戳以帮助订购。并且公司的地图字段以承包商的密钥作为密钥并具有一定的价值。当您尝试过滤和分类时,https: //firebase.google.com/docs/firestore/solutions/arrays中提到了此方法。

Contractors
  companies
    idCompany1: timestamp
    idCompany2: timestamp
    idCompany3: timestamp

Companies
  contractors
    idContractor1: timestamp
    idContractor2: timestamp
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以进行任何查询,例如该公司承包商或该承包商的公司。像这样:

fireStore.collection("Companies").whereField("contractors." + idContractor, isGreaterThan: 0).order(by: "contractors." + idContractor, descending: true)
Run Code Online (Sandbox Code Playgroud)

是的,您必须在任何任务中同时更新两个位置

希望这可以帮助!

  • 为什么时间戳作为一个值? (4认同)
  • 我与客户/用户的结构完全相同。我唯一要添加的是Firestore安全规则可能是这样的:允许读取:如果resource.data.contractors [request.auth.uid]> 0; 假设idContractor1是uid。然后,只有承包商才能看到允许的公司。 (3认同)