在 Firebase 中使用 push() 时如何提取唯一 ID

新手上路,请多包涵

我正在尝试从 Firebase 数据库中添加/删除条目。我想将它们列在要添加/修改/删除(前端)的表中,但我需要一种方法来唯一标识每个条目以便修改/删除。 Firebase 在使用 push() 时默认添加一个唯一标识符,但我在 API 文档中没有看到任何关于如何选择这个唯一标识符的内容。这甚至可以做到吗?我应该改用 set() 来创建唯一 ID 吗?

我使用他们的教程将这个快速示例放在一起:

 <div id='messagesDiv'></div>
<input type='text' class="td-field" id='nameInput' placeholder='Name'>
<input type='text' class="td-field" id='messageInput' placeholder='Message'>
<input type='text' class="td-field" id='categoryInput' placeholder='Category'>
<input type='text' class="td-field" id='enabledInput' placeholder='Enabled'>
<input type='text' class="td-field" id='approvedInput' placeholder='Approved'>
<input type='Button' class="td-field" id='Submit' Value="Revove" onclick="msgRef.remove()">

<script>
var myDataRef = new Firebase('https://unique.firebase.com/');

  $('.td-field').keypress(function (e) {
    if (e.keyCode == 13) {
      var name     = $('#nameInput').val();
      var text     = $('#messageInput').val();
      var category = $('#categoryInput').val();
      var enabled  = $('#enabledInput').val();
      var approved = $('#approvedInput').val();
      myDataRef.push({name: name, text: text, category: category, enabled: enabled, approved: approved });
      $('#messageInput').val('');
    }
  });
  myDataRef.on('child_added', function(snapshot) {
    var message = snapshot.val();
    displayChatMessage(message.name, message.text, message.category, message.enabled, message.approved);
  });
  function displayChatMessage(name, text, category, enabled, approved, ) {
    $('<div/>').text(text).prepend($('<em/>').text(name+' : '+category +' : '+enabled +' : '+approved+ ' : ' )).appendTo($('#messagesDiv'));
    $('#messagesDiv')[0].scrollTop = $('#messagesDiv')[0].scrollHeight;
  };
</script>

现在假设我有三行数据:

 fred : 1 : 1 : 1 : test message 1
fred : 1 : 1 : 1 : test message 2
fred : 1 : 1 : 1 : test message 3

我如何去唯一标识第 2 行?

在 Firebase 数据库中,它们看起来像这样:

 -DatabaseName
    -IuxeSuSiNy6xiahCXa0
        approved: "1"
        category: "1"
        enabled: "1"
        name: "Fred"
        text: "test message 1"
    -IuxeTjwWOhV0lyEP5hf
        approved: "1"
        category: "1"
        enabled: "1"
        name: "Fred"
        text: "test message 2"
    -IuxeUWgBMTH4Xk9QADM
        approved: "1"
        category: "1"
        enabled: "1"
        name: "Fred"
        text: "test message 3"

原文由 Front_End_Dev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 428
2 个回答

要获取任何快照的“名称”(在本例中为 push() 创建的 ID),只需像这样调用 name():

 var name = snapshot.name();

如果你想获得由 push() 自动生成的名字,你可以在返回的引用上调用 name(),就像这样:

 var newRef = myDataRef.push(...);
var newID = newRef.name();


注意: snapshot.name() 已弃用。查看其他答案。

原文由 Andrew Lee 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于发现此问题并使用 Firebase 3+ 的任何人,推送后获取自动生成的对象唯一 ID 的方式是使用 key promise 快照上的属性( _不是方法_):

 firebase
  .ref('item')
  .push({...})
  .then((snap) => {
     const key = snap.key
  })

Firebase 文档 中阅读更多相关信息。

作为旁注,那些考虑生成自己的唯一 ID 的人应该三思而后行。它可能对安全和性能有影响。如果您不确定,请使用 Firebase 的 ID。它包含一个时间戳,并具有一些开箱即用的简洁安全功能。

更多信息在 这里

push() 生成的唯一键按当前时间排序,因此生成的项目列表将按时间顺序排序。密钥也被设计成不可猜测的(它们包含 72 个随机位的熵)。

原文由 Dan Mindru 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题