HUH函数
经过进一步的研究,我将尝试回答我自己的问题。我已经审查了许多其他帖子,解决这个问题的一个解决方案是在一个公司对象中存储ContractorKeys列表,并在每个承包商对象中存储一个CompanyKeys列表。下面的例子说明了这一点。companies : {
companyKey1 : {
name : company1
...
contractors : {
contractorKey1 : true,
contractorKey3 : true
}
}
companyKey2 : {
name : company2
...
contractors : {
contractorKey2 : true,
}
}
}
contrators : {
contractorKey1 : {
name : bill
...
companies : {
companyKey1 : true
}
}
contractorKey2 : {
name : steve
...
companies : {
companyKey1 : true
}
}
contractorKey3 : {
name : jim
...
companies : {
companyKey2 : true
}
}
}这个组织的“工作”意义上说,上述问题是可以回答的。但是这种解决方案的一个缺点是,当承包商/公司的任务发生变化时,有两个列表需要维护。如果有一种方法在一个列表中表示这些信息,那就更好了。我想出了一个更好的解决办法。解决方案是创建第三份清单,此外还有公司和承包商,称为ComanyAndContractorAsmission。这份清单的内容将代表单一承包商和业主之间的关系。它的内容将是一对字段,ContractorKey和companyKey。然后,我们可以取消公司内部的承包商名单和承包商内部的公司名单。这种替代结构如下所示。注意,在公司对象中没有承包商列表,也没有带有承包商对象的公司列表。companies : {
companyKey1 : {
name : company1
...
}
companyKey2 : {
name : company2
...
}
}
contrators : {
contractorKey1 : {
name : bill
...
}
contractorKey2 : {
name : steve
...
}
contractorKey3 : {
name : jim
...
}
}
companyAndContractorsAssignment : {
key1 : {
contractorKey1 : true,
companyKey1: true,
}
key2 : {
contractorKey3 : true,
companyKey1: true,
}
key3 : {
contractorKey2 : true,
companyKey2: true,
}这种替代结构允许一个人使用orderBychild/equalto来回答问题-对公司进行查询-AndContractorsAs写意-查找承包商的所有公司或公司的所有承包商。现在只有一份清单需要维护。我认为这是我的需求的最佳解决方案。