J'ai cette liste: a b c d e f g h i j
. Je veux obtenir 3 éléments de la liste autour d'un élément sélectionné. Si j'ai sélectionné e
la liste des résultats devrait être d e f
, si j'ai sélectionné f
les résultats devraient être e f g
et ainsi de suite.Comment faire de la pagination dans Google Firestore?
J'ai fait cet exemple:
console.clear()
var pag = dbFirestore.collection("pagination")
pag.doc("a").set({parent:"vowels"})
pag.doc("e").set({parent:"vowels"})
pag.doc("i").set({parent:"vowels"})
pag.doc("o").set({parent:"vowels"})
pag.doc("u").set({parent:"vowels"})
pag.doc("y").set({parent:"vowels"})
pag.doc("b").set({parent:"consonants"})
pag.doc("c").set({parent:"consonants"})
pag.doc("d").set({parent:"consonants"})
pag.doc("f").set({parent:"consonants"})
pag.doc("g").set({parent:"consonants"})
pag.doc("h").set({parent:"consonants"})
pag.doc("j").set({parent:"consonants"})
pag.doc("k").set({parent:"consonants"})
pag.doc("l").set({parent:"consonants"})
pag.doc("m").set({parent:"consonants"})
pag.doc("n").set({parent:"consonants"})
pag.doc("p").set({parent:"consonants"})
pag.doc("q").set({parent:"consonants"})
pag.doc("r").set({parent:"consonants"})
pag.doc("s").set({parent:"consonants"})
pag.doc("t").set({parent:"consonants"})
pag.doc("v").set({parent:"consonants"})
pag.doc("w").set({parent:"consonants"})
pag.doc("x").set({parent:"consonants"})
var siblings = ref => {
var out = []
return pag.orderBy("parent").endAt(ref).limit(3).get().then(snap=>{
snap.forEach(doc=>out.push(doc.id))
return
}).then(()=>{
return pag.orderBy("parent").startAfter(ref).limit(2).get().then(snap=>{
snap.forEach(doc=>out.push(doc.id))
return out
})
})
}
siblings(pag.doc("m")).then(out=>{
console.log(out)
}).catch(e=>console.error(e))
Avec sibling("m").then(out=>console.log(out))
dans out
je devrais avoir k l m n p
, ils ont tous parent:"consonants"
, k l m
de la première requête combinée à n p
de la deuxième requête, mais je dois autre chose.
J'ai ajouté '{val: letter}' à tous les documents. 'startAfter (letter)' fonctionne comme attendu obtient 'np', mais:' pag.where ("parent", "==", "consonnes"). orderBy ("val"). endAt ("m") .limit (3) 'obtient' bcd' les 3 premières consonnes au lieu de la 'prev' kl' plus' m' –
@AlinC oui vous avez raison j'ai fait une erreur. Dans les genres qui utilisent conjointement 'endAt' et' limit', ce n'est pas une bonne idée, car les résultats de la requête se termineront à la plus forte de ces contraintes. Laissez-moi mettre à jour. –
Je pense qu'il nous reste à utiliser 'unshift' au lieu de' push' pour 'threeBefore' parce que nous obtenons' m l k n p' au lieu de 'k l m n p'. Je vais essayer de me mettre à jour votre réponse. Je ne peux pas l'éditer, je dois éditer plus alors comme 6 caractères. De toute façon je sais paginer savoir, merci. –