【问题标题】:Firebase ordering and retrieving the index for a specific recordFirebase 排序和检索特定记录的索引
【发布时间】:2017-03-14 12:41:27
【问题描述】:

我使用的是 Firebase 2.4.2。我有一个数据库如下:

  "items": {
    "item1": {
      "details": {
        "name": "item 1",
        "rate": 5
    },

    "item2": {
      "details": {
        "name": "item 2",
        "rate": "4"
      }
    }

    "item3": {
      "details": {
        "name": "item 3",
        "rate": "6"
      }
    }
  }

我有数千个项目,不想将它们全部加载到一个表中。相反,我想加载 top10 以及用户单击的项目。因此,如果您在页面中:/items/details/item2,我希望您在表中看到数据库中的前 10 项(基于它们的费率)和item2。我还想在有序列表中显示item2 的索引

ind id     rate
1   item56 100
2   item33 98
...
143 item2  13

如果带宽没有问题,我们通常会按如下方式检索所有数据(例如使用 AngularFire)

var ref = fbutil.ref('items').orderByChild('details/rate');
 return $firebaseArray(ref); 

但是,我想订购它们,检索前 10 名,然后根据其速率检索 item2(在本例中)及其索引 (143)。

我该怎么做?

【问题讨论】:

    标签: javascript firebase firebase-realtime-database angularfire nosql


    【解决方案1】:
    // For getting top 10
    var ref = fbutil.ref('items').orderByChild('details/rate').limitToFirst(10);
    return $firebaseArray(ref); 
    
    // For getting single
    var ref = fbutil.ref('items').orderByChild('details/rate').equalTo(13);
    var singleItem = $firebaseObject(ref);
    

    查看以下链接以查看firebase.database.Reference 类支持哪些方法。

    https://firebase.google.com/docs/reference/js/firebase.database.Reference

    【讨论】:

    • 感谢 Zura,但这并不能回答我的问题。问题不在于获得前10名和特定项目。问题是根据其rate(基于用于对前 10 项排序的相同指标)获取数据库中该特定项目的索引,而无需从数据库中检索整个数据。
    • 明白。请问你为什么要这个索引,你的最终目的是什么?
    • 想象一下你有成千上万的项目。我不想在每次有人点击一个项目时加载它们。相反,我想显示排名靠前的项目以及当前项目基于其比率的排名。
    猜你喜欢
    • 2017-12-23
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2017-01-19
    • 2017-10-21
    相关资源
    最近更新 更多