添加具有自动递增的自定义 ID 的子项 - Firebase
Posted
技术标签:
【中文标题】添加具有自动递增的自定义 ID 的子项 - Firebase【英文标题】:Add child with automatically incremented custom ID - Firebase 【发布时间】:2017-12-05 11:45:42 【问题描述】:我想用自动递增 id 向 firebase 数据库添加一个新用户,如下截图所示:
我试过了:
var rootRef = firebase.database().ref();
var storesRef = rootRef.child("/users");
storesRef.set(
"name": "user1",
"pageId": "user1"
);
【问题讨论】:
你需要用户ID是0,1,2,...
吗?否则,您可以使用 Firebase 的内置 ID 生成,它还保留了创建顺序,因为它考虑了创建时间。
@alexkucksdorf 是的,需要用户 ID。因为我是从 quickblox 导入的
正如 Alex 所说:使用像这样按顺序、单调递增的 ID 将严重阻碍应用程序的可扩展性和离线行为。我建议您阅读 Firebase 博客文章:firebase.googleblog.com/2014/04/…
【参考方案1】:
我确实不推荐这个,但您可以尝试以下方法:
storesRef.limitToLast(1).once('value', (snapshot) =>
const nextID = parseInt(snapshot.key) + 1;
let updates = ;
updates['/users/' + nextID] = // your user;
rootRef.update(updates);
);
但是,我强烈建议您改用 Firebases 自动生成的 ID,因为这种方法很容易出错。
你也应该看看this answer.
【讨论】:
【参考方案2】:我花了很长时间试图为我自己的项目解决这个问题,但和往常一样,结果看起来很容易:
var newUserIndex;
storesRef.on('value', snap =>
newUserIndex = snap.val().length;
);
database.ref('users/' + newUserIndex).set(name:'user1', pageId:'user1');
因为数据库是从零开始的,所以 snap.val().length 总是给出需要的下一个索引。我认为使用 snap 可能会过度使用并且浪费资源(我才刚刚开始使用 Firebase,所以仍在掌握它) - 但是在控制台中检查使用统计信息,显然不是。
并非每个人都在构建具有多个用户且需要可扩展性的应用。我了解使用 push() 自动生成密钥的好处,但它并不总是适合小型项目和单用户项目的解决方案。
【讨论】:
以上是关于添加具有自动递增的自定义 ID 的子项 - Firebase的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ADO.NET DataSet 和 DataAdapter 将树结构持久保存到具有自动递增 ID 的数据库表中
如何从 SQL Server 中的自定义数字自动增加主键? [关闭]