У меня есть content
узел, который я извлекаю из базы данных Firebase Realtime.
Я использую .orderByChild("time")
, чтобы получить моментальный снимок данных первых 5 объектов блога, упорядоченных по их самым ранним временным меткам. I
в настоящее время пытается использовать .indexOn : "time"
вместо этого, чтобы мне не приходилось использовать .orderByChild("time")
, поскольку я ожидаю, что объекты блога уже упорядочены по своей временной метке бэкэндом при их получении. (Я собираюсь работать с очень большим количеством объектов блога, поэтому я хочу использовать .indexOn : "time"
в бэкэнде вместо orderByChild("time")
в бэкэнде для повышения эффективности). В настоящее время .indexOn
не работает, и данные не упорядочены по их временным полям при получении.
запрос без .indexOn
// this works fine
// startAt is utilized for saving last blog object retrieved to retrieve more data
query =
FirebaseDatabase.getInstance().getReference()
.child("content")
.orderByChild("time")
.startAt(nodeId)
.limitToFirst(5);
запрос с помощью .indexOn
// this along with the Firebase rules below does not return the same result as above
// startAt is utilized for saving last blog object retrieved to retrieve more data
query =
FirebaseDatabase.getInstance().getReference()
.child("content")
.startAt(nodeId)
.limitToFirst(5);
Правила Firebase:
{
"rules": {
".read": true,
".write": true,
"content" : {
".indexOn": "time"
}
}
}
JSON структура данных в Firebase:
"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"
}
...
}