为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 limit 和 startAt 应用于 firestore 文档的子项

如何将 limit 和 startAt 应用于 firestore 文档的子项

明月笑刀无情 2022-06-05 09:59:26
我正在尝试在 firestore 中应用分页,我需要从集合集合中的hats doc中的items数组中获取前 5 个项目(总共 200 个项目) ,然后在下一次单击时我需要让他下一个 5 等等上。testPagination = async () => {    const { currentPage, itemsPerPage } = this.state;    const { fetchCollectionsForPagesStart, match : { params } } = this.props;    const collectionId = params.collectionId;    const startAt = currentPage * itemsPerPage - itemsPerPage;    const docs =  await firestore.collection("collections").orderBy('id').startAt(0).limit(itemsPerPage).get();    const data = docs.docs;    const items = docs.forEach( async docItem => {        console.log(await docItem.data());    })}当我点击我的渲染函数中的按钮时,我运行这个函数,render(){    return (        <button onClick={this.testPagination}>Test pagination </button>    );}但我的结果中总是有 200 个项目,那么我如何将 startAt() 和 limit() 应用于 firestore 中的项目数组。这是我的数据库:这个 console.log(await docItem.data()); 给我注意:我正在接收帽子文档 ID,所以如果有办法访问带有 id 的帽子,我也需要一些帮助,我也尝试过const docs = await firestore.doc(`collections/${collectionId}`).get();const data = await docs.data();但这不允许我应用 startAt() 和 limit()
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

在你的数据库中,hats是一个文件的collections集合。在 Firestore 中,您不能带入文档的一部分(items例如,数组中的 5 个项目)始终带入所有文档,并且它在 Firestore 中被视为一次读取。如果要对items数组进行分页,则必须在其中创建一个hats包含数据的子集合items。有了这个结构,您可以startAtQuery()使用limit()5 个文档执行 a,在这种情况下,它在 Firestore 中计为 5 次读取。

您可以在此处查看有关 Firestore 数据模型的所有信息:https ://firebase.google.com/docs/firestore/data-model


查看完整回答
反对 回复 2022-06-05
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信