Firestore:按子集合字段排序

时间:2019-05-08 11:53:24

标签: google-cloud-firestore

首先,这不是一个常规问题。有点复杂。

应用摘要

食谱应用程序,用户可以在其中按选定成分搜索食谱(firestore数据库中存在收集成分)。我想存储每个成分的统计信息,用户对所选成分的搜索量为多少,以便稍后在他们主要用于搜索食谱的顶级成分中显示它们。

这就是我的收藏集的样子:

http://prntscr.com/nlz062

现在我想通过创建的登录用户的统计信息来订购食谱。

first = firebaseHelper
                    .getDb()
                    .collection(Constants.INGREDIENTS_COLLECTION)
                    .orderBy("statistics." + firebaseHelper.getCurrentUser().getUid() + ".count")
                    .limit(25);

如果登录的用户尚未搜索配方中的食材,则应正常订购。无论如何,上面的查询无法正常工作。这种用例是否可以通过Firestore完成。

注意:登录用户的统计信息可能存在或不存在,这完全取决于他的搜索。

1 个答案:

答案 0 :(得分:1)

您不能通过文档中不立即存在的字段来查询和文档。或者,换句话说,您不能在不在查询的命名集合中的子集合中使用字段文档。

从今天开始(使用最新的Firestore客户端库),您可以改为执行collection group query来查询所有称为“统计信息”的子集合的计数字段。但是,那仍然只会为您提供静电学文档。您将不得不迭代这些文档,从其引用中解析成分文档ID,并分别get()这些文档中的每一个以显示UI。

在JavaScript中,集合组查询如下所示:

firestore
    .collectionGroup("statistics")
    .where(FieldPath.documentId())
    .orderBy("count")
    .limit(25)

您应该能够迭代这些结果并毫无问题地获得相关文档。