如何在多对多关系中构建和查询来自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")
您还可以根据需要使用in
和array-contains-any
运算符。