【问题标题】:How to retrieve multiple keys in Firebase? [duplicate]如何在 Firebase 中检索多个密钥? [复制]
【发布时间】:2016-11-06 15:47:14
【问题描述】:

考虑到这个数据结构:

{
    "users":{
        "user-1":{
            "groups":{
                "group-key-1":true,
                "group-key-3":true
            }
        }
    },
    "groups":{
        "group-key-1":{
            "name":"My group 1"
        },
        "group-key-2":{
            "name":"My group 2"
        },
        "group-key-3":{
            "name":"My group 3"
        },
        "group-key-4":{
            "name":"My group 4"
        },
    }
}

我可以通过以下方式获取特定用户的组:

firebase.database().ref('users/user-1/groups').on(...)

这会给我这个对象:

{
    "group-key-1":true,
    "group-key-3":true
}

所以现在我想检索这些组的信息。

我最初的直觉是循环这些键并这样做:

var data = snapshot.val()
var keys = Object.keys(data)

for (var i = 0; i < keys.length; i++) {
    firebase.database().ref('groups/' + keys[i]).on(...)
}

这是在 Firebase 中调用同一端点上的多个键的适当方式吗?

Firebase 是否提供更好的方法来解决此问题?

【问题讨论】:

标签: javascript firebase firebase-realtime-database


【解决方案1】:

这是在同一端点上调用多个键的适当方式吗 在 Firebase 中?

是的,通常这是以这种方式检索每个组的好解决方案。

Firebase 是否提供更好的方法来解决此问题?

我认为 Firebase 没有提供任何其他可以在这种情况下提供帮助的功能/查询。

无论如何,这可以改进,将 ref 保存在变量中并直接循环对象的键。另外,如果您只需要检索这些数据一次,则应使用once() 而不是on()

var groupRef =  firebase.database().ref('groups/')
var data = snapshot.val()

for (var groupID in data) {
    groupRef.child(data[groupID]).once(...)
}

另一种方法是使用 Firebase 的 functions 获取数据快照,例如 forEach

snapshot.forEach(function(childSnapshot) {
      groupRef.child(childSnapshot.key).once(...)
})

【讨论】:

  • 对 forEach 的想法很好! :)
  • 谢谢@adolfosrs!您对流水线侦听器的回答也很好:)
【解决方案2】:

是的,你走对了。正如this question 中所写,firebase 将处理您的请求,您不必担心性能和往返时间。一旦您的迭代开始,您将收到 firebase 数据。所以请记住在您的 ui 中正确处理它。

另一个选项,这将取决于您的 /groups 数据将增长到多大,是保留整个 /groups 分支的快照(如果您使用的是 angularfire,则可能是一个 $firebaseObject),该快照将在数据时刷新变化。然后你只需要跟踪这个快照。但同样,如果您打算与大量组一起玩,您当前的解决方案是更好的选择。

另外,我建议您注意为您检索的每个组设置一个on 事件。请记住,只要数据更改(取决于设置的事件),就会触发回调。根据您的用例,您应该考虑使用.once("value",因为它只会触发一次数据,使其更可靠、更具性能,并且可以避免在您不期望的时候处理回调。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2018-08-21
    • 2017-05-31
    • 2020-09-02
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    相关资源
    最近更新 更多