I have the following query to get the newest 16 articles since the last fetch:
db.ref("articles).startAt(null, "last_fetched_key").orderByChild("published").limitToLast(16);
So it should start at the last article I have, then order those by the child key "published", then limit those results to 16.
It works as long as I don't do orderByChild("published") but if I do, I always get 16 items?
Note: I see this behavior on both nodejs (firebase-admin 5.1.0) and browser (firebase-sdk 4.2.0)
Example: (see below for data example)
function countObj(obj) { var c=0; for (var k in obj) { c++; } return c; }
function getLastKey(obj) { var lk=null; for (var k in obj) { lk = k; } return lk; }
firebase.database().ref("articles/-KnLhC7S0wtNV17R-w2I")
.orderByChild("published")
.limitToLast(4) // limit 4,
.once("value", function(snap) {
var data = snap.val();
console.log("#1 Results: "+ countObj(data.val())); // Results: 4
var lastKey = getLastKey(data);
// With .orderByChild("published")
// Should return 1 result because articles contains 4, we pass the 4th key to startAt()
firebase.database().ref("articles/-KnLhC7S0wtNV17R-w2I")
.startAt(null, lastKey) // use startAt
.orderByChild("published")
.limitToLast(4)
.once("value", function(snap) {
var data = snap.val();
console.log("#2 Results: "+ countObj(data.val())); // Results: 4
});
// Without .orderByChild("published")
// Returns 1 result because articles contains 4, we pass the 4th key to startAt()
firebase.database().ref("articles/-KnLhC7S0wtNV17R-w2I")
.startAt(null, lastKey) // use startAt
.limitToLast(4)
.once("value", function(snap) {
var data = snap.val();
console.log("#3 Results: "+ countObj(data.val())); // Results: 1
});
});
Data:
{
"articles" : {
"-KnLhC7S0wtNV17R-w2I" : {
"1498230632000-3M7VnZESptDyGP4iN6BXlNqi6ukG4HgWkX4KvwiWEKs%3D_15cd582aa38%3A50c8a%3A35f03cd7" : {
"published" : 1498230632000
},
"1498230632001-3M7VnZESptDyGP4iN6BXlNqi6ukG4HgWkX4KvwiWEKs%3D_15cd582aa38%3A50c8a%3A35f03cd7" : {
"published": 1000
},
"1498230632002-3M7VnZESptDyGP4iN6BXlNqi6ukG4HgWkX4KvwiWEKs%3D_15cd582aa38%3A50c8a%3A35f03cd7" : {
"published": 900
},
"1498230632003-3M7VnZESptDyGP4iN6BXlNqi6ukG4HgWkX4KvwiWEKs%3D_15cd582aa38%3A50c8a%3A35f03cd7" : {
"published": 1100
},
}
}
}