1

我有一个有序的火力基地位置列表。我使用属性ut(更新时间)作为他们的优先级。我想制作列表,以便轻松获取最新更新的文档。

所以我将优先级设置为负数ut

var query = fb.child('view/documents').limit(20)
query.on('child_added', function(child) { 
  console.log(child.val())
  console.log(child.getPriority())
})

我希望这样的东西可以返回最新的 20 个文档,但它没有,它返回最旧的 20 个。在伪造中,我以我期望的方式查看列表,最新的文档在顶部,但查询正在发送给我后 20 名。这似乎与我的预期相反,查询将前 20 名而不是前 20 名发送给我。

真正让我困惑的是 child_added 返回预期的顺序,最新的(最小优先级)首先。但它又是列表中最古老的。

我是做错了什么还是这是firebase中的一个错误。

谢谢。

4

2 回答 2

3

我理解你的困惑,但这就是它应该如何工作的:limit(20)返回 20 个最优先的孩子,从第 20 个最优先的孩子开始,以绝对最优先的孩子结束(然后在有新孩子时更新添加了其优先级足以列入列表的内容)。

您可以在https://www.firebase.com/docs/queries.html看到示例,其中优先级是消息发送时的 Unix 时间戳,messageListRef.limit(100)用于获取最近的 100 条消息(即100 条最高优先级消息)。

于 2013-07-21T06:29:07.113 回答
2

我认为您正在寻找的是:limit()之前的.startAt(),它将以正确的顺序返回数据,如果没有关键字,您将始终获得最后指定数量的孩子。

这是参考:https ://www.firebase.com/docs/javascript/query/limit.html

于 2013-07-21T06:47:02.020 回答