Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Google Firestore中进行分页?_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript 如何在Google Firestore中进行分页?

Javascript 如何在Google Firestore中进行分页?,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我有以下列表:a b c d e f g h I j。我想从列表中获得一个选定项目周围的3个项目。如果我选择了e,结果列表应该是def,如果我选择了f,结果应该是efg,依此类推 我举了一个例子: console.clear() var pag = dbFirestore.collection("pagination") pag.doc("a").set({parent:"vowels"}) pag.doc("e").set({parent:"vowels"}) pag.doc("i").set

我有以下列表:
a b c d e f g h I j
。我想从列表中获得一个选定项目周围的3个项目。如果我选择了
e
,结果列表应该是
def
,如果我选择了
f
,结果应该是
efg
,依此类推

我举了一个例子:

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))

使用
sibling(“m”)。然后(out=>console.log(out))
in
out
我应该有
kl m n p
,它们都有
父项:“辅音”
klm
来自第一次查询,与
np
来自第二次查询,但我还有别的事。

问题在于你形成查询的方式
startAt
endAt
等操作传递给
orderBy
的字段。因此,如果您执行
.orderBy(“parent”).startAt(“foo”)
,则表示“按照doc.parent的值对所有文档进行排序,从doc.parent==foo开始”

所以你必须在这里做一些改变。首先,如果您在文档中存储字母的值,则查询会更容易,因此您的文档可能如下所示:

{
  "val": "a",
  "parent": "vowels"
}
然后您可以执行以下查询:

/**
 * ex: siblingsOf("a", "vowels");
 */
function siblingsOf(letter, parent) {
   var out = [];

   // Starting at the letter, read "up" three documents
   var threeBefore = pag.where("parent", "==", parent)
      .orderBy("val", "desc").startAt(letter).limit(3);

   // Starting after the letter, read "down" three documents
   var twoAfter = pag.where("parent", "==", parent)
      .orderBy("val").startAfter(letter).limit(2);

   return threeBefore.get().then(snap => {
     // Add to beginning of array
     snap.forEach(doc => out.unshift(doc.data()));
   }).then(() => {
     return twoAfter.get().then(snap => {
       // Add to end of array
       snap.forEach(doc => out.push(doc.data()));

       return out;
     });
   });
}

因此,如果我做了
siblingsOf(“j”,“consonates”)
,我会得到
“g”,“h”,“j”,“k”,“l”的文档

firebase上有文档。我们必须使用startAt()或startAfter()方法来定义查询的起点。类似地,使用endAt()或endBefore()方法为查询结果定义一个端点。

我向所有文档添加了
{val:letter}
startAfter(字母)
按预期工作,获取
np
,但是:
pag.where(“父项”)、“==”、“辅音”).orderBy(“val”).endAt(“m”).limit(3)
获取
bd
前3个辅音,而不是前面的
kl
加上
m
@AlinC是的,我犯了一个错误。通常情况下,将
endAt
limit
一起使用不是一个好主意,因为查询结果将以约束更强的那一个结束。让我更新一下。我想我们已经使用了
unshift
而不是
push
for
threeBefore
,因为我们得到了
mlknp
而不是
klmnp
。我会尽力更新你的答案。我不能编辑它,我必须编辑超过6个字符。无论如何,我知道如何分页知道,谢谢。Alin C,我和你有同样的问题Firestore分页不起作用