【问题标题】:Firestore how to query data from collection where document reference contains specific query pathFirestore如何从文档引用包含特定查询路径的集合中查询数据
【发布时间】:2018-12-09 06:33:55
【问题描述】:

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

这是我的 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 的示例。

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

提前致谢

【问题讨论】:

  • 这个问题你解决了吗?
  • @AlexMamo 不,我需要确切的解决方案来满足我的需要

标签: java android firebase google-cloud-firestore


【解决方案1】:

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

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

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

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

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

player/8SLuNWrI09UIuUfNe7ZR/playerinfo`

并且不是

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

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

【讨论】:

    【解决方案2】:

    您只想通过文档在数据库中的位置来获取文档:

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

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

    【讨论】:

    • 您的答案并不如我所愿,此时我不会只获得一个文档,我需要获取属于特定集合的所有文档列表(注意:特定文档引用路径中的该集合)
    • eg: player/8SLuNWrI09UIuUfNe7ZR/playerinfo playerinfo 是特定文档下的集合(8SLuNWrI09UIuUfNe7ZR)。在这里我需要获取 playerinfo 集合下的所有文档
    猜你喜欢
    • 2018-06-19
    • 2021-09-25
    • 2021-08-12
    • 2020-03-08
    • 2021-06-10
    • 1970-01-01
    • 2018-12-07
    • 2020-07-24
    • 2020-07-26
    相关资源
    最近更新 更多