首页 文章

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

提问于
浏览
0

How to query data from collection where document reference contain specific path?

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

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

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

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

  • 0

    您在Firestore的官方文档中找不到任何示例,但遗憾的是,没有 contains() 方法可以帮助您验证String是否是引用的一部分,这是文档的属性 .

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

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

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

    但请记住,只有当属性 user 保存类型为String的值时,才会起作用,该值等于:

    player/8SLuNWrI09UIuUfNe7ZR/playerinfo`
    

    not

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

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

相关问题