Firestore如何从文档参考包含特定查询路径的集合中查询数据

时间:2018-06-30 06:24:59

标签: java android firebase google-cloud-firestore

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

这是我的Firestore数据库,归档的用户是文档参考类型,映射的文档参考表是其他集合。

enter image description here

在这里,我需要从 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的示例。

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

预先感谢

2 个答案:

答案 0 :(得分:0)

您只想按其在数据库中的位置获取文档:

mFirebaseFirestore.collection("userinfo").document("8SLuNWrI09UIuUfNe7ZR").get()

如果您知道要提取的特定文档,则无需查询。

答案 1 :(得分:0)

在Firestore的官方文档中找不到任何示例,因为不幸的是,没有contains()方法可以帮助您验证String是否属于引用(属于文​​档的属性)。

但是,如果要获取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转换为String,将它们添加到Reference中。最后,只需遍历列表并在每个元素上使用contains()方法。