【问题标题】:Storing a list of ids in Firebase在 Firebase 中存储 id 列表
【发布时间】:2016-04-17 17:09:43
【问题描述】:

我不知道如何用 firebase 解决这个问题: 我有用户,每个用户都有帖子,每个帖子都有一个由 firebase 生成的 id,我如何将这些 id 存储在用户节点中?

我正在使用字符串,将它们连接起来,在我的 js 应用程序中解析它们。基本上将它们视为 csv 文件。但我想这是一个非常丑陋的解决方案

存储这种数据的方法是什么?

编辑:

用户ID:

  • 用户名 = “用户名”
  • 帖子 = "id1,id2,id3,id4"

当用户有新帖子时,我使用事务在字符串末尾附加一个新 id。当我需要删除 id 时,我再次使用事务并使用以下代码删除元素:

removeElem(list, value) {
var separator = ",";
var values = list.split(separator);
for (var i = 0; i < values.length; i++) {
    if (values[i] == value) {
        values.splice(i, 1);
        return values.join(separator);
    }
}
return list;
},

【问题讨论】:

  • 不要描述你的数据结构和代码,而是展示它。提供一个最小的、完整的、可编译的示例来重现您所询问的内容。然后说出你的顾虑是什么,因为“丑”是很主观的。你认为丑陋的东西,我可能会认为“它有效,所以它很漂亮”。
  • 我编辑了我的帖子并添加了一些信息。
  • 在下面回答。通常,这主要是Firebase guide for JavaScript developers 的相关sn-p 的副本。我强烈建议您今天从头到尾阅读该指南。现在在那里度过几个小时,将节省更多时间(和许多问题)。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

虽然事务可以解决这个问题,但它会严重损害可扩展性,并且在用户暂时失去连接时根本无法工作。要获得更好的解决方案,请摆脱数组逻辑并使用 Firebase 的 push() 方法。来自Firebase documentation on saving lists of data

推送与交易

在处理数据列表时,push() 确保唯一且按时间顺序排列的 ID。您可能很想使用事务来生成自己的 ID,但推送是更好的选择。事务更慢更复杂。它们需要到服务器的一次或多次往返。可以在客户端生成推送 ID,离线时也可以工作,并针对性能进行了优化。

虽然可能需要一些时间来适应非顺序键,但从长远来看会更好。

【讨论】:

  • 好吧,但就我而言,数据应该是什么样子?老实说,我很难弄清楚这一点。在用户的帖子节点中,我只需要 ids,它应该看起来像这样: Posts { id1 : "something, id2 : "something", ... }
  • 要明确一点,帖子在一个单独的节点中,我使用 push 方法生成唯一 ID。
  • 它应该但是你可以最好地使用它。但是一个常见的结构是{ id1: true, id2: true }。请参阅 using indices to define complex relationships 上的 Firebase 文档。
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 2021-04-26
  • 2019-01-28
  • 2021-11-30
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多