Java Firebase。indexOn未按预期工作
我有一个Java Firebase。indexOn未按预期工作,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我有一个content节点,可以从Firebase实时数据库中检索。 我利用.orderByChild(“time”)获取按最早时间戳排序的前5个博客对象的数据快照。我 我目前正在尝试使用.indexOn:“time”,这样我就不必使用.orderByChild(“time”),因为我希望在检索博客对象时,后端已经按照其时间戳对其进行排序。(我将处理大量博客对象,因此我希望在后端使用.indexOn:“time”,而不是在前端使用orderByChild(“time”),以提高效率)。当前,.i
content
节点,可以从Firebase实时数据库中检索。
我利用.orderByChild(“time”)
获取按最早时间戳排序的前5个博客对象的数据快照。我
我目前正在尝试使用.indexOn:“time”
,这样我就不必使用.orderByChild(“time”)
,因为我希望在检索博客对象时,后端已经按照其时间戳对其进行排序。(我将处理大量博客对象,因此我希望在后端使用.indexOn:“time”
,而不是在前端使用orderByChild(“time”)
,以提高效率)。当前,.indexOn
不起作用,并且在检索数据时,数据不按其时间字段排序
查询时不使用.indexOn
//这很好用
//startAt用于保存检索到的最后一个blog对象以检索更多数据
查询=
FirebaseDatabase.getInstance().getReference()
.child(“内容”)
.orderByChild(“时间”)
.startAt(nodeId)
.limitToFirst(5);
使用.indexOn进行查询
//这与下面的Firebase规则一起不会返回与上面相同的结果
//startAt用于保存检索到的最后一个blog对象以检索更多数据
查询=
FirebaseDatabase.getInstance().getReference()
.child(“内容”)
.startAt(nodeId)
.limitToFirst(5);
Firebase规则:
{
"rules": {
".read": true,
".write": true,
"content" : {
".indexOn": "time"
}
}
}
Firebase中数据的JSON结构:
"content" : {
"blog-0001" : {
"content_id" : "blog-0001",
"image" : "someimage",
"time" : 13,
"title" : "title1",
"type" : "blog"
},
"blog-0002" : {
"content_id" : "blog-0002",
"image" : "someimage",
"time" : 12,
"title" : "title2",
"type" : "blog"
},
"blog-0003" : {
"content_id" : "blog-0003",
"image" : "someimage",
"time" : 11,
"title" : "title3",
"type" : "blog"
},
"blog-0004" : {
"content_id" : "blog-0004",
"image" : "someimage",
"time" : 15,
"title" : "title4",
"type" : "blog"
}
...
}
您似乎误解了
.indexOn
的功能,以及它与orderByChild(“时间”)
的关系
要从内容中检索子节点,请始终调用orderByChild(“time”)
如果定义索引(使用“.indexOn”:“time”
),则排序和筛选将在服务器上完成
如果没有索引,content
下的所有数据都将下载到客户端,并在客户端执行排序/过滤
因此,.indexOn
不能替代orderByChild
。相反,这两种方法协同工作来执行数据的有效排序和过滤