Firebase条件/可选查询

时间:2017-07-19 21:45:00

标签: javascript firebase web firebase-realtime-database

我对Firebase相对较新,我正在尝试为我创建一个迷你包装器来查询我的数据库。

我的问题是,我不知道如何添加条件查询sch作为orderByChild ...

/* Available Arguments:
 *  - key: Order using a child key
 *  - firstAmt: Only get the first x elements
 *  - lastAmt: Only get the last x elements
 *  - startAt: Get elements starting from index x
 *  - endAt: Get elements ending at index x
 */
// Not providing anything will give the first 15 elements
function getProjects(arg, callback, errorCB) {
    if (!arg) arg = {};
    if (!arg.firstAmt) arg.firstAmt = 15;

    var obj = firebase.database().ref('projects');
    if (arg.key) {
        obj.orderByChild(arg.key);
    }
    if (arg.firstAmt) {
        obj.limitToFirst(arg.firstAmt);
    }
    if (arg.lastAmt) {
        obj.limitToLast(arg.lastAmt);
    }
    if (arg.startAt) {
    obj.startAt(arg.startAt);
    }
    if (arg.endAt) {
        obj.endAt(arg.endAt);
    }

    obj.once('value').then((snapshot) => { callback(snapshot.val())}).catch(errorCB);
 }

当我使用{firstAmt:1}调用getProjects时,我获得了数据库中的每个项目,而不是第一个项目。

我不知道这是否是正确的方法,但我觉得测试每个用例(arg.key&& arg.firstAmt ......)可能会过度使用它。

谢谢!

1 个答案:

答案 0 :(得分:0)

limitToFirst limitToLast startAt endAt equalTo仅适用于orderByKey orderByChildorderByValue

因此,我建议您将代码更改为:

if (arg.key) {
    obj.orderByChild(arg.key);
} else {
    obj.orderByKey();
}

这应该会给你快照,直到前15个元素。