首先,这不是一个常规问题。有点复杂。
应用摘要
食谱应用程序,用户可以在其中按选定成分搜索食谱(firestore数据库中存在收集成分)。我想存储每个成分的统计信息,用户对所选成分的搜索量为多少,以便稍后在他们主要用于搜索食谱的顶级成分中显示它们。
这就是我的收藏集的样子:
现在我想通过创建的登录用户的统计信息来订购食谱。
first = firebaseHelper
.getDb()
.collection(Constants.INGREDIENTS_COLLECTION)
.orderBy("statistics." + firebaseHelper.getCurrentUser().getUid() + ".count")
.limit(25);
如果登录的用户尚未搜索配方中的食材,则应正常订购。无论如何,上面的查询无法正常工作。这种用例是否可以通过Firestore完成。
注意:登录用户的统计信息可能存在或不存在,这完全取决于他的搜索。
答案 0 :(得分:1)
您不能通过文档中不立即存在的字段来查询和文档。或者,换句话说,您不能在不在查询的命名集合中的子集合中使用字段文档。
从今天开始(使用最新的Firestore客户端库),您可以改为执行collection group query来查询所有称为“统计信息”的子集合的计数字段。但是,那仍然只会为您提供静电学文档。您将不得不迭代这些文档,从其引用中解析成分文档ID,并分别get()这些文档中的每一个以显示UI。
在JavaScript中,集合组查询如下所示:
firestore
.collectionGroup("statistics")
.where(FieldPath.documentId())
.orderBy("count")
.limit(25)
您应该能够迭代这些结果并毫无问题地获得相关文档。