首页 > 解决方案 > Firestore如何从文档引用包含特定查询路径的集合中查询数据

问题描述

如何从文档引用包含特定路径的集合中查询数据?

这是我的 Firestore 数据库,归档用户是文档引用类型,映射文档引用形成其他集合。

在此处输入图像描述

在这里,我需要从userinfo集合中获取所有数据,其中用户文档引用包含特定路径(例如:player/8SLuNWrI09UIuUfNe7ZR/playerinfo

我尝试了以下查询,但似乎不起作用:

Query query = mFirebaseFirestore.collection("userinfo").whereGreaterThanOrEqualTo("user", "player/8SLuNWrI09UIuUfNe7ZR/playerinfo");

从查询中获取数据的代码:

query.addSnapshotListener(new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(QuerySnapshot queryDocumentSnapshots, FirebaseFirestoreException e) {
                    //queried data here
                }
 });

文档上没有可用于使用文档引用类型查询 Firestore 的示例。

请帮助我从具有特定路径的文档引用的集合中查询文档列表。

提前致谢

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


您在 Firestore 的官方文档中找不到任何示例,因为不幸的是,没有任何contains()方法可以帮助您验证字符串是否是参考的一部分,参考是文档的属性。

但是,如果您想获取playerinfo集合下存在的所有文档,则只需使用get()调用。addSnapshotListener()除非您需要实时获取数据,否则请勿使用。

有一个解决方案,您需要将user属性转换为 String 类型并使用如下所示的查询:

Query query = = mFirebaseFirestore.collection("userinfo").whereEqualTo("user", "player/8SLuNWrI09UIuUfNe7ZR/playerinfo");

但是请记住,这只有在属性user包含一个 String 类型的值时才有效,该值等于:

player/8SLuNWrI09UIuUfNe7ZR/playerinfo`

不是

player/8SLuNWrI09UIuUfNe7ZR/playerinfo/qY0D7Vef...
                                       ^      ^

还有一种方法可以解决这个问题。查询整个集合,获取user属性的所有值,并List通过将它们从转换Reference为字符串将它们添加到 a。最后,只需遍历列表并contains()在每个元素上使用方法。


推荐阅读