仅从大型索引中获取Firebase中具有指定键的对象

时间:2014-05-20 15:04:05

标签: json rest firebase

我有array = [ 'something', 'other' ]

我想从Firebase中仅检索那些2 ids的值,其中包含超过2个项目(可能是数百万),但如果我这样做:

var questionRef = new Firebase(fireBaseURL+"/morethanamillionitems/");

loadUID.once('value', function (dataSnapshot) {

    dataSnapshot.forEach(function(childSnapshot) {  // Firebase method

      console.log(dataSnapshot.numChildren()); // potentially outputs 1.000.000 +
      var uid = childSnapshot.name();
      var childData = childSnapshot.val();
      console.log(uid.indexOf('something'));
      result.push(uid)
    });
}

我首先基本上加载整个数据库,这不是那么有效

现在我能做到:

array.forEach(key, function() {
  var questionRef = new Firebase(fireBaseURL+"/morethanamillionitems/"+key);
  refID = questionRef.val();
  result.push(refID);
})

或者也许:

questionRef = new Firebase(fireBaseURL+"/morethanamillionitems/");
array.forEach(key, function() {
  if ( questionRef.child(key) !== null ){
     refID = questionRef.val();
     result.push(refID);
  }
})

最后一个似乎是最好的,前一个在旧RAM上看起来有点贵。

但是,我显然每次都要调用questionRef.once('value', function(){}),因此已经加载了整个文档根...

或者我误解了Firebase如何处理这些请求? .numChildren()只是直接来自服务器的答案吗?

.forEach实际上是远程执行的吗?

我想知道是否有其他方法可以减少每个请求的流量。这让我想到了另一个问题:似乎firebase首先在本地搜索,但最终会进行远程搜索,但是当这种情况发生时它并不清楚。是否定期检查是否有变化?或者只有当我使用.on()而不是.once()时才会发生这种情况。 或者我是否为此目的使用了错误的后端?还有其他建议吗?我试过hood.ie,它仍然非常测试,看着Parse,但firebase似乎有我需要的简单。

(抱歉草率的语法,但你可以看到我的意图)

[更新] 我现在有这个:

load: function(uids){
     var FB = new Firebase(URL);
        uids.map(function(uid) {
          var currentRef = FB.child( uid+"/_current" );
          currentRef.once('value', function (each) {
              eachVal = each.val()
              if (eachVal !== null){
                var localSave = {};
                localSave[uid] = eachVal;
                this.saveLocal(localSave)
              } else {
                console.error("Not found: [%s]", uid)
            }}, function (err) {  });
        });
    }

但是我仍然想知道请求何时实际发生在.child()?或者在.once()中,如果是后者,.child()的用途是什么?它似乎只用于引用。

然后第二件事,如果我想要检索一百个项目的数组,这仍然意味着一百个单独的请求?或者Firebase是否有办法收集请求然后批量发送? 在最后一种情况下,.once将是一个更保守的'初始检索的选项,如果您需要实时更新,则可以在以后添加.on侦听器。

0 个答案:

没有答案