【问题标题】:Compound query not giving correct results [Firestore]复合查询未给出正确结果 [Firestore]
【发布时间】:2020-03-09 07:17:44
【问题描述】:

这是我的表格(所有值都是字符串类型,'subjects' 是一个数组):

我正在尝试:

  FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
  Query q = rootRef.collection("users");


  q = q.whereArrayContains("subjects", "Science").
           whereEqualTo("qualification","0").
               whereEqualTo("gender", "Male").
                  whereLessThanOrEqualTo("fee", "300");

  q.get().addOnCompleteListener(task -> {
            if (task.isSuccessful()) {
                for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {

                        Log.d("LogHeree ", "here " + document.get("name"));

                }
            }
        });

它不返回任何东西。

我试过了:

 q = q.whereArrayContains("subjects", "Science").
               whereEqualTo("qualification","0").
                   whereEqualTo("gender", "Male");

这(上面的查询)给出了正确的结果。

还有:

 q = q.whereLessThanOrEqualTo("fee", "300");

这(上面的查询)也给出了正确的结果。 显然,单独运行时查询工作正常。 那么,我在这里做错了什么,或者为什么结合起来不起作用?

附:不重复:Firestore compound query with <= & >= 因为我在单个字段上使用不等式。 我收到此错误:“查询需要索引...”

【问题讨论】:

  • 您的代码没有响应查询中可能发生的错误(isTaskSuccessful 可能返回 false)。如果您检查文档中显示的错误,您会发现什么? firebase.google.com/docs/firestore/query-data/…
  • 还请记住,您将多个数字存储为字符串,这很可能会导致范围查询和比较出现问题,因为字符串不像数字那样排序。除非您完全知道自己在做什么,否则永远不应该将数字存储为字符串。
  • 感谢您的审阅,我尝试将数据类型更改为数字,但结果仍然相同。我会尝试获取错误并添加。
  • 那么究竟是什么错误?请编辑问题,使其具体并且完整您观察到的内容。
  • 您到底遇到了哪个错误?也许您的表中没有满足所有条件的字段。

标签: android google-cloud-firestore string-comparison


【解决方案1】:

我认为你写错了集合名称:

改变这个:

Query q = rootRef.collection("users");

进入这个:

Query q = rootRef.collection("Users");

【讨论】:

  • 我能够使用相同的集合(即“用户”)在简单查询中获取数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-09
相关资源
最近更新 更多