【问题标题】:Firebase Web retrieve dataFirebase Web 检索数据
【发布时间】:2016-12-29 05:22:22
【问题描述】:

我在 firebase 中有以下 db 结构

我正在尝试获取属于特定用户 ID (uid) 的数据。该文档有以下示例:

firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) {
  var username = snapshot.val().username;
  // ...
});

但是如何在不知道每个对象的唯一键的情况下从我的示例中检索数据?

更新:

我尝试了一种新方法,将用户 ID 添加为主键,每个子对象都有自己的唯一 ID。

现在的挑战是如何获取“title”的值。

【问题讨论】:

    标签: javascript json firebase firebase-realtime-database


    【解决方案1】:
    firebase.database().ref('/tasks/').orderByChild('uid').equalTo(userUID)
    

    嗯,这很简单。然后你可以这样使用它:

    return firebase.database().ref('/tasks/').orderByChild('uid').equalTo(userUID).once('value').then(function(snapshot) {
      var username = snapshot.val().username;
      // ...
    });
    

    当然需要设置userUID。

    它是带有一些过滤的查询。更多关于Retrieve Data - Firebase doc

    编辑:新挑战的解决方案是:

    var ref = firebase.database().ref('/tasks/' + userUID);
    //I am doing a child based listener, but you can use .once('value')...
    ref.on('child_added', function(data) {
       //data.key will be like -KPmraap79lz41FpWqLI
       addNewTaskView(data.key, data.val().title);
    });
    
    ref.on('child_changed', function(data) {
       updateTaskView(data.key, data.val().title);
    });
    
    ref.on('child_removed', function(data) {
       removeTaskView(data.key, data.val().title);
    });
    

    请注意,这只是一个示例。

    【讨论】:

    • 谢谢!您认为将用户 ID 添加为每个对象的主键是最佳做法吗?然后尝试检索每个子对象。
    • 我对我的问题进行了更新,显示了新结构。
    • 这取决于使用场景。如果您构建待办事项列表,最好使用用户 ID 作为主键。我会在一段时间内编辑答案以匹配您的问题编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多