火力^ 2.2.9
Firebase节点如下所示:
{
articles: {
"-KcNAv56MZQAr8a_kJYh": {
topic: 'a',
text: 'lorem...'
},
"-KcNAv5Dd33KE2qfWVFa": {
topic: 'a',
text: 'lorem...'
},
"-KcNAv5IjjTnmXBCeGFi": {
topic: 'b',
text: 'lorem...'
},
}
}
firebase push
命令生成的密钥。
我想检索最后(按时间顺序排列)20篇主题为“a”的文章。然后分页。
firebase.root.child('articles')
.orderByChild('topic')
.equalTo('a')
.startAt(offset)
.limitToLast(20)
.once('value', snapshot => {...})
没有办法按两个参数(topic
和key
)订购,所以我假设我需要在firebase控制面板中创建一个索引,它将按topic
订购文章并由key
。那么,我如何通过key
订购它?
{
"rules": {
"articles": {
".indexOn": ["topic", ???]
}
}
}
答案 0 :(得分:0)
Firebase数据库查询只能对单个属性进行排序/过滤。
但startAt
和endAt
对分页有一些额外的支持。当您筛选许多子节点可能匹配的特定属性值(在您的情况下为topic: 'a'
)时,您可以指定要在其中数据库开始/结束返回值的项的键。您将此密钥作为第二个参数传递给startAt
或endAt
。
在你的情况下,这变成:
ref.child('articles')
.orderByChild('topic')
.startAt('a')
.endAt('a', '-KcNAv5Dd33KE2qfWVFa')
.limitToLast(2)
.once('value', snapshot => {
console.log(snapshot.val());
})
此查询为最后2个子节点提供topic: 'a'
之前和之后项目-KcNAv5Dd33KE2qfWVFa
,因此:
“ - KcNAv56MZQAr8a_kJYh”
“ - KcNAv5Dd33KE2qfWVFa”
有关工作示例,请参阅此jsbin:http://jsbin.com/bovuyetoki/edit?js,console
为了完整起见,这是我定义的唯一索引:
"articles": {
".indexOn": "topic"
}