带有键节点的 Firebase sorting/filtering

Firebase sorting/filtering with keys node

{
"places": {
    "<push-key>": {
        "name": "Company X"
    },
    "<push-key>": {
        "name": "Restaurant Y"
    }
}
"stamps": {
    "<push-key>": {
        "value": 0,
        "date": 1487344650456
    }
},
"placeStamps": {
    "<place-push-key>": {
        "<stamp-push-key-1>": true,
        "<stamp-push-key-2>": true,
        "<stamp-push-key-3>": true
    }
}
}

我们是 Firebase 的新手,我们想知道是否有一种方法可以按日期对我们的邮票(数据库中的节点)进行排序。我们的流程如下:

有没有办法通过例如“日期”或“值”来 sort/filter 这些对象?我们不能在客户端进行,因为我们正在谈论数百万张邮票。

查询24小时前的邮票:

var ref = firebase.database.ref("stamps");
var now = Date.now();
var yesterday = now - 24 * 60 * 60 * 1000;
var query = ref.orderByChild("Date").startAt(yesterday);
query.on("child_added", function(snapshot) {
    console.log(snapshot.key);
});

如果您想通过时间戳检索某个地点的邮票,您有两种选择:

  • 检索地点的邮票并按时间戳排序 client-side。检索多个项目并不像您预期​​的那么慢,因为 Firebase 对请求进行了管道处理。参见
  • 将时间戳添加到每个地点的戳记键中:

    placeStamps": {
      "<place-push-key>": {
        "<stamp-push-key-1>": 1487344650456,
        "<stamp-push-key-2>": 1487344650457,
        "<stamp-push-key-3>": 1487344650458
      }
    }
    

    现在您可以通过时间戳获取地点的邮票:

    var ref = firebase.database.ref("placeStamps").child("<place-push-key>");
    var now = Date.now();
    var yesterday = now - 24 * 60 * 60 * 1000;
    var query = ref.orderByValue().startAt(yesterday);