过滤firebase数据和订购结果

时间:2017-01-16 04:18:56

标签: javascript firebase firebase-realtime-database

我正在编写一个使用Firebase作为数据库的HTML / JavaScript应用程序。

我的数据结构有点像这样:

steps/
- GUID
-- tripId
-- name
-- description
-- order
-- launchDate

我想从 tripId 匹配特定值(在变量中传递)的步骤中选择任何项目。然后我想通过降序 order 来订购结果。

我更习惯使用T-SQL类型语法,因此在实时数据库的世界中感到困惑。

以下是我的代码现在的样子片段。

var steps = function readSteps(format, tripId) {
    var stepsRef;
    stepsRef = firebase.database().ref('steps/');
    stepsRef.orderByChild('order').on('value', function (response) {
        // DO SOME LOGIC HERE WITH 'response' DATA
    });
}

我不知道如何过滤这些结果,我也不知道如何轻松地进行降序排序。 order 是一个整数。

1 个答案:

答案 0 :(得分:2)

要获取订单42的所有步骤,您需要查询:

stepsRef = firebase.database().ref('steps/');
stepsRef.orderByChild('order').equalTo(42).on('value', function (snapshot) {
    snapshot.forEach(function(stepSnapshot) {
        console.log(stepSnapshot.key, stepSnapshot.val());
    });
});

但如果您总是要查找订单的步骤,那么最好不要对JSON进行不同的建模:

orderSteps
  order42
    step1: ...
    step2: ...
    step3: ...
  order43
    step1: ...
    step2: ...

这使您可以检索订单的步骤,而无需查询:

stepsRef = firebase.database().ref('orderSteps/order42');
stepsRef.on('value', function (snapshot) {
    snapshot.forEach(function(stepSnapshot) {
        console.log(stepSnapshot.key, stepSnapshot.val());
    });
});

如果想要在子属性上订购此结果,它将变为:

stepsRef.orderByChild("field").on('value', function (snapshot) {

我建议阅读NoSQL data modeling并查看Firebase for SQL developers以了解有关在NoSQL数据库中建模数据的更多信息。