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

时间:2017-12-05 11:45:42

标签: javascript firebase firebase-realtime-database

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

enter image description here

我试过了:

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

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

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

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