【问题标题】:Firestore Order By UserId with highest priorityFirestore 按 UserId 排序,优先级最高
【发布时间】:2021-03-27 13:26:55
【问题描述】:

我正在做一个项目,我需要对结果进行分页,以便加载数据库中具有最高优先级的用户。 else 块是用户的初始负载,if 块应该控制分页,但是我在分页调用中得到空结果(0 个文档),同时在初始调用中成功获取用户。

我有 41 个测试文档,限制设置为 20,所以我应该在第三个页面上获得 2 个完整页面 +1 个额外用户,但是我只能获得(用户)文档的第一页。我查看了分页文档,并且已经为 firestore 建立了索引,但我仍然无法解决这个问题。任何帮助将不胜感激,并提前感谢您。

if(lastId != null){
  return store.collection("users")
         .whereEqualTo("gender", searchingFor)
         .whereEqualTo("geoHashGroup", geoHashGroup)
         .orderBy("priority")
         .orderBy("userId")
         .startAfter(lastId)
         .limit(limit)
} else {
  return store.collection("users")
         .whereEqualTo("gender", searchingFor)
         .whereEqualTo("geoHashGroup", geoHashGroup)
         .orderBy("priority")
         .limit(limit)
}

我在这个方法中设置了lastId,每次有人滑动某人时都会触发该方法。

override fun onCardDisappeared(view: View?, position: Int) {
        swipedCardUser = pmList[position]
        lastId = swipedCardUser!!.userId
        if(position == pmList.lastIndex){
            Log.d("REFRESHCARDS", swipedCardUser!!.geoHashGroup!!)
            findPotentialMatches()
        }
    }

【问题讨论】:

  • 您能否编辑您的问题以显示您如何设置lastId

标签: java android firebase kotlin google-cloud-firestore


【解决方案1】:

您没有在userId 上对初始查询进行排序,这意味着数据库仅按优先顺序对文档进行排序,并从中返回“随机”的 20 个用户。因此,不能保证您在lastId 中拥有的userId 实际上是您通过userId 订购时的第20 个用户。

分页查询通常完全相同,除了startAfter,这就是为什么我通常将它们写成:

const query = store.collection("users")
         .whereEqualTo("gender", searchingFor)
         .whereEqualTo("geoHashGroup", geoHashGroup)
         .orderBy("priority")
         .orderBy("userId")
         .limit(limit);
if(lastId != null){
  query = query.startAfter(lastId);
}
return query;

【讨论】:

  • 感谢您的快速回复。不幸的是,这似乎仍然没有产生预期的结果。看起来 startAfter 只是获取带有 lastId 的文档,因为它是 userId 而不是下一组文档。
  • 啊,我明白了....您实际上需要为您订购/过滤的所有字段传递值,而不仅仅是 ID。如果您保留锚文档的整个DocumentSnapshot,并将其传递给startAfter(),那么通常最简单的方法是query.startAfter(lastDocumentSnapshot)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 2011-10-09
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多