【问题标题】:Add child with automatically incremented custom ID - Firebase添加具有自动递增的自定义 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/…

标签: javascript firebase firebase-realtime-database


【解决方案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() 自动生成密钥的好处,但它并不总是适合小型项目和单用户项目的解决方案。

    【讨论】:

      猜你喜欢
      • 2022-11-15
      • 2017-06-22
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 2010-11-05
      • 2021-03-17
      相关资源
      最近更新 更多