【问题标题】:Firebase : pagination with multiple 'orderBy' and 'orderBy' with FieldPath.documentId()Firebase:使用 FieldPath.documentId() 使用多个“orderBy”和“orderBy”进行分页
【发布时间】:2022-01-02 18:41:54
【问题描述】:

我会测试这样的请求

 let ref = firestore().collection(COLLECTION)
 ref = ref.where('date', "in", ['01/01/2022', '02/01/2022'])
 ref = ref.where('valueP', '>', 12)
 ref = ref.where('valueP', '<', 32
 ref = ref.orderBy('valueP')

if (filterType) {
  ref = ref.where('product.type', '==', filterType) // filterType is a string variable
}
if (filterCategory) {
  ref = ref.where('product.category', '==', filterCategory) // filterCategory is a string variable
}

// pagination
ref = ref.orderBy(firebase.firestore.FieldPath.documentId(), 'asc')
if (paginationStart) {
  ref = ref.startAfter(paginationStart)   // paginationStart is a documentid
}
ref = ref.limit(10)

ref.get()

第一次,我的请求奏效了。我有 10 个文件。

我将最后一个文档 ID 保存在变量“paginationStart”中。没关系

第二次,我的请求有过滤器“startAfter”,但我的数据和第一次一样。

过滤器“startAfter”有问题吗?

感谢您的帮助。

【问题讨论】:

  • "paginationStart" 是最后一个文档而不是文档 ID
  • @JafarJabr ,这是我的示例的最后一个文档 ID ( 4rGDPbDfU3a2qZvvtGG2 )
  • 他们的文档说它必须是整个文档,而不仅仅是 id,firebase.google.com/docs/firestore/query-data/…
  • ahhhh 好的,是的,我进行了测试,它可以工作,但是......我对最后一个文档有疑问,redux 不起作用啊啊 redux-persist/createPersistoid:错误序列化状态 [TypeError: JSON. stringify 无法序列化循环结构。] .... 我必须像文档示例一样保留所有文档?
  • 我建议保存服务中的最后一个文档或您之前使用的任何内容发送到 redux

标签: javascript firebase react-native


【解决方案1】:

Firebase 文档建议 startAfter 是整个文档,而不仅仅是文档 ID

更多详情here

【讨论】:

  • @roplopfan 值得一提的是,startAftermodernlegacy SDK 中都可以获取键值对列表(对应于 orderBy 限制)而不是完整的文件也。所以对于上面的查询,你会使用startAfter("valueP", lastValueP, firebase.firestore.FieldPath.documentId(), lastDocumentId)
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 2021-10-24
  • 1970-01-01
  • 2021-10-13
相关资源
最近更新 更多