2017-02-20 72 views
1
{ 
"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的新手,我们想知道是否有方法按日期对我们的邮票(数据库中的节点)进行排序。我们的流程如下:用钥匙节点进行Firebase排序/过滤

  • 我们使用places节点检索我们想要的地方。
  • 使用我们从placeStamps/node检索邮票密钥的位置的关键字。
  • 然后我们从邮票节点一个接一个地检索邮票。

有没有一种方法来排序/过滤这些对象,例如'日期'或'价值'?我们无法做到客户端,因为我们正在谈论数以百万计的邮票。

+0

我加低于第一刺。如果这不是你坚持的,分享[重现问题的最小代码](http://stackoverflow.com/help/mcve)。 –

回答

0

要查询邮票自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); 
}); 

如果你要检索的邮票由时间戳的某个地方,你有两个选择:

  • 检索的邮票通过客户端的时间戳进行放置和排序。检索多个项目的速度并不像您期望的那么慢,因为Firebase可以管理这些请求。见Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly
  • 时间戳添加到邮票键每个地方:通过时间戳与

    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); 
    
+0

但是,如果我只想过滤属于某个地方的邮票,这将如何工作?邮票节点可能会有数百万条记录。逐个检索所有这些记录是否有效? –

+0

逐个检索多个项目并不像您想象的那么慢。请参阅http://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-social-network-app-by-using-query-instead-of-obse/35932786#35932786。我还用更多的信息更新了我的答案。 –

+0

我明白了,但是如何过滤邮票节点,但只能检索位于我的放置键下的placeStamps节点内的键的项目? –