Javascript 添加具有自动递增的自定义ID的子项-Firebase

Javascript 添加具有自动递增的自定义ID的子项-Firebase,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我想使用自动递增id向firebase数据库添加一个新用户,如下屏幕截图所示: 我试过: var rootRef = firebase.database().ref(); var storesRef = rootRef.child("/users"); storesRef.set({ "name": "user1", "pageId": "user1" }); 我不推荐这样做,但您可以尝试以下方法: storesRef.limitToL

我想使用自动递增id向firebase数据库添加一个新用户,如下屏幕截图所示:

我试过:

    var rootRef = firebase.database().ref();
    var storesRef = rootRef.child("/users");
    storesRef.set({
      "name": "user1",
      "pageId": "user1"
    });

我不推荐这样做,但您可以尝试以下方法:

storesRef.limitToLast(1).once('value', (snapshot) => {
    const nextID = parseInt(snapshot.key) + 1;
    let updates = {};
    updates['/users/' + nextID] = // your user;
    rootRef.update(updates);
});
但是,我强烈建议您使用Firebase自动生成的ID,因为这种方法非常容易出错


您还应该看看

我不建议这样做,但您可以尝试以下方法:

storesRef.limitToLast(1).once('value', (snapshot) => {
    const nextID = parseInt(snapshot.key) + 1;
    let updates = {};
    updates['/users/' + nextID] = // your user;
    rootRef.update(updates);
});
但是,我强烈建议您使用Firebase自动生成的ID,因为这种方法非常容易出错


你也应该看看

我花了很长时间试图为我自己的项目解决这个问题,结果一如往常,它看起来很容易:

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()使用自动生成的密钥的好处,但对于较小的项目和单用户项目来说,它并不总是正确的解决方案。

我花了很长时间试图为我自己的项目解决这个问题,结果像往常一样,它看起来很容易:

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为
0,1,2,…
?否则,您可以使用Firebase内置的ID生成,这也会保留创建顺序,因为它会考虑创建时间。@alexkucksdorf是的,需要用户ID。因为我是从quickbloxAs导入的,Alex说:像那样使用顺序、单调递增的ID将严重阻碍应用程序的可伸缩性和离线行为。我建议您阅读Firebase的博客文章:您是否需要用户ID为
0,1,2,…
?否则,您可以使用Firebase内置的ID生成,这也会保留创建顺序,因为它会考虑创建时间。@alexkucksdorf是的,需要用户ID。因为我是从quickbloxAs导入的,Alex说:像那样使用顺序、单调递增的ID将严重阻碍应用程序的可伸缩性和离线行为。我建议您阅读Firebase的博客文章: