【问题标题】:query for max values among subcollections in firestore查询firestore中子集合中的最大值
【发布时间】:2020-10-24 20:36:09
【问题描述】:

我想将排行榜添加到我的应用程序中,它将显示排名前 50 的用户。

我的firestore构建如下:

USERS(集合)-> UID(文档)-> UserData(集合)-> UID(文档)-> 字段

其中一个字段称为排名。

现在,我想执行类似的操作:

db
    .collection( "USERS" )
    .document(UID)
    .collection("UserData")
    .document(UID)
    .orderBy( "rank", Query.Direction.DESCENDING )
    .limit( 50)
    .get()

但我知道它不会起作用,因为它会查询特定文档而不是整个 USERS 集合。

有没有什么方法可以在不进入每个文档的情况下搜索每个用户的排名并获得该值?还是我必须改变数据库的结构?

谢谢

【问题讨论】:

    标签: java google-cloud-firestore


    【解决方案1】:

    如果您想在所有同名子集合中查询文档,您需要执行collection group query,您可以使用它来查找和排序这些子集合中的所有文档。

    db
        .collectionGroup("UserData")
        .orderBy( "rank", Query.Direction.DESCENDING )
        .limit( 50)
        .get()
    

    【讨论】:

    • 即使不经过USERS->特定文档UID,它是否可以直接从UserData查询?因为我试过了,好像没有返回任何结果。
    • 这就是这个查询所做的——直接访问所有具有给定名称的子集合。您还应该检查错误,因为您必须为此创建索引,如果没有索引,查询将失败。
    • 错过了索引的事情。谢谢老哥
    猜你喜欢
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    相关资源
    最近更新 更多