Android 复合查询未给出正确的结果[Firestore]
这是我的表(所有值都是字符串类型,'subjects'是数组): 我正在努力:Android 复合查询未给出正确的结果[Firestore],android,google-cloud-firestore,string-comparison,Android,Google Cloud Firestore,String Comparison,这是我的表(所有值都是字符串类型,'subjects'是数组): 我正在努力: FirebaseFirestore rootRef = FirebaseFirestore.getInstance(); Query q = rootRef.collection("users"); q = q.whereArrayContains("subjects", "Science"). whereEqualTo("qualification","0").
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");
这个(上面的查询)给出了正确的结果
此外:
这个(上面的查询)也给出了正确的结果。
显然,当单独运行时,查询工作正常。
那么,我在这里做错了什么,或者为什么组合起来不起作用
注意:不是重复的:因为我在单个域上使用不等式。
我得到了这个错误:“查询需要一个索引…”我想你写错了集合名称: 更改此项:
Query q = rootRef.collection("users");
为此:
Query q = rootRef.collection("Users");
您的代码没有响应查询中可能发生的错误(ISTASKSUCCESS可能返回false)。如果您检查文档中所示的错误,您会发现什么?还要记住,您将多个数字存储为字符串,这很可能会导致范围查询和比较出现问题,因为字符串不像数字那样排序。除非您完全知道自己在做什么,否则您永远不应该将数字存储为字符串。感谢您的审阅,我尝试将数据类型更改为数字,但结果仍然相同。我将尝试获取错误并添加。那么错误到底是什么?请对问题进行编辑,使其具体、完整,以了解您所观察到的情况。您到底遇到了哪些错误?也许您的表中没有满足所有条件的字段。我可以使用相同的集合(即“用户”)在简单查询中获取数据。
Query q = rootRef.collection("Users");