火力云云恢复多对多关系



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

我有公司和承包商。一个承包商可以为多个公司工作,一个公司可以有多个承包商。这是一个直截了当的多对多关系。我希望能够回答有关公司和承包商的问题:

给定一家公司,谁是当前的承包商。给定承包商他们为什么公司工作。在Cloud Firestore中构建数据的正确方法是什么?

您可以让 承包商 项目带有一个地图字段,该字段将键作为公司键,并且值可以是 true ou 时间戳以帮助排序。和带有地图字段的公司,其中承包商键作为键和一些值。https://firebase.google.com/docs/firestore/solutions/arrays 中提到了这种 aproach,当您尝试过滤和排序时......

Contractors
  companies
    idCompany1: timestamp
    idCompany2: timestamp
    idCompany3: timestamp
Companies
  contractors
    idContractor1: timestamp
    idContractor2: timestamp

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

fireStore.collection("Companies").whereField("contractors." + idContractor, isGreaterThan: 0).order(by: "contractors." + idContractor, descending: true)

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

希望这有帮助!

正如 André Lima 在他的回答中所解释的那样,您可以使用数组来建立关系。但我不认为这两个集合都需要为用于映射的数组提供一个字段。只有一个集合需要具有关系数组的字段。

companies: {
  contractors: ['contractor_id_1', 'contractor_id_2', 'contractor_id_2']
}

查询时,可以使用array-contains operator根据数组值进行筛选。

示例查询 (Web):

companiesRef.where("contractors", "array-contains", "contractor_id_1")

您还可以根据需要使用inarray-contains-any运算符。

最新更新