我知道 Firebase 不支持节点之间的 JOIN(就像 SQL Server 在表之间所做的那样),但这正是我需要完成的。这是我的情况:
我在 Firebase 中有一个这样的事务节点(我在其中包括每个事务的类别名称):
"transactions":
{
"-Jruazf35b9a_gAVmZBe":
{
payee: "McDonalds", amount: "2.35", category: "Eating Out"
}
"-JruadR11b4a_aTVmZFi":
{
payee: "Walmart", amount: "78.12", category: "Household"
}
"-Jruazf35b9a_AgvNWCq":
{
payee: "CapitalOne", amount: "150.00", category: "Debt"
}
"-JryJF2c33ijbjbBc24p":
{
payee: "FootLocker", amount: "107.54", category: "Personal Blow"
}
"-Jrz0T-aL61Vuw4SOqRb":
{
payee: "Starbucks", amount: "2.88", category: "Eating Out"
}
}
我有一个像这样的类别节点(我在每个类别下都包括交易):
"categories":
{
"-Jruazf35b2a_gAVmZRy":
{
categoryname: "Eating Out",
categorytype: "Expense"
}
"transactions": {
"-Jruazf35b9a_AgvNWCq": {
payee: "McDonalds", amount: "2.35"
}
.
.
.
}
}
}
到目前为止,一切都很好。我的数据是平的。我可以显示带有类别名称的交易列表(下面的屏幕截图),我可以在每个类别的费用部分显示每个类别下的交易列表(此处未显示屏幕截图)。
我遇到的问题是,如果我重命名一个类别,那么更改只会反映在未来的交易中。过去的交易显示旧的类别名称。
由于我保存数据的方式,这很明显。所以我的第一个逻辑反应是在交易节点中保存类别唯一 ID 而不是类别名称。但是,这带来了挑战,在我的 SQL Server 小大脑中,我需要一个 JOIN,这样我才能获取事务列表,还包括每个事务的类别名称。
如何构建我的数据,以便我可以:
- 显示交易列表,包括类别名称(就像今天一样)
- 允许用户重命名一个类别并显示反映所有交易(过去和未来)的变化
- 显示每个类别下的交易列表(我认为当前的方法仍然有效)