【问题标题】:Firebase orderByChild unexpected resultsFirebase orderByChild 意外结果
【发布时间】:2016-07-13 22:40:27
【问题描述】:

我有以下单子数据结构,想通过子属性rating检索订单列表:

样本数据结构

players: {
    360368: {
        name: "Joe, Blogs",
        rating: 1853
    },
    400017: {
        name: "Bob, Dylan",
        rating: 2597,
    },
    430013: {
        name: "James, Dean",
        rating: 2152,
    }
}

检索代码

let ref = this.fb.ref('players');

ref.orderByChild("rating").limitToFirst(100).once("value", function(snapshot) {
     console.log(snapshot.val());
});

返回的结果似乎没有逻辑数字顺序。

最后,当我运行以下查询时,我得到了我期望的结果(看到 10 个评分为 2597 的玩家):

let ref = this.fb.ref('players');

ref.orderByChild("rating").equal(2597).limitToFirst(10).once("value", function(snapshot) {
     console.log(snapshot.val());
});

更新

对象键似乎正在返回数据。我怎样才能确保这是由rating订购的?!

【问题讨论】:

    标签: javascript node.js firebase firebase-realtime-database


    【解决方案1】:

    当您为查询请求 value 事件时,Firebase 会返回一个快照,其中包含所有子项及其订单信息。但是,当您请求该快照的val() 时,子代将转换为 JOSN 对象,并且排序信息会丢失。

    解决方案是使用快照来导航孩子,并且只有在您以正确的顺序获得它们后才转换为 JSON:

    let ref = this.fb.ref('players');
    
    ref.orderByChild("rating").equal(2597).limitToFirst(10).once("value", function(snapshot) {
        snapshot.forEach(function(childSnapshot) {
            console.log(childSnapshot.val());
        });
    });
    

    【讨论】:

    • 这是黄金。我整个上午都在寻找这个。快照上的那个 val() 东西是一个订购的陷阱:'(
    猜你喜欢
    • 1970-01-01
    • 2019-03-21
    • 2021-09-17
    • 1970-01-01
    • 2017-08-22
    • 2020-12-26
    • 2012-10-09
    • 2018-09-04
    • 2017-06-02
    相关资源
    最近更新 更多