java - Firestore 查询不等于 Uid
问题描述
我很抱歉不得不问这个问题,我一直在研究无数的链接,但一直没能找到。这似乎很简单,但远非如此。
我知道您不能在 Firestore 中执行不等于查询,因此我的代码如下:
private void getNotEqual() {
// db defined elsewhere
Query query = db.collection("collection")
.whereLessThan("uid", user.getUid())
.whereGreaterThan("uid", user.getUid())
.orderBy("uid");
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
Log.d(TAG, "Size: " + task.getResult().size());
}
});
}
但它仍然没有返回不相等的文件。Uid 来自 Firebase 身份验证,并作为字符串存储为文档中的字段。我在这里错过了什么吗?
预先真诚地感谢您。
解决方案
此查询始终不会返回任何文档。它实际上是要求所有 uid 字段大于和小于某个值的文档,这是一个不可能满足的条件。Firestore 查询中的过滤器在逻辑上是“与”在一起的。它们在逻辑上不是 OR'd。 Firestore 不支持查询中的逻辑 OR。
听起来您想执行两个单独的查询,然后在客户端中合并结果。一个查询将有whereLessThan("uid", user.getUid())
,另一个whereGreaterThan("uid", user.getUid())
. 但老实说,您可能更容易获取集合中的所有文档,然后手动过滤掉您不想要的文档。
推荐阅读
- javascript - 传递给 PHP 文件的 AJAX 数据给出“未定义索引”错误
- c# - 无法使用服务容器中的服务和默认值来实例化 SwaggerGenerator 类型的构造函数
- database - 理解 Cassandra Db 中的隔离
- html - 如何获得不超过页面宽度 100% 的 bootstrap 4 flex 表?
- node.js - Cloud Functions 400 错误请求,在 hello world 应用程序中 JSON 无效
- c# - 如何在 ItemsSource 是其他模型类的 ListView 中从 ViewModel 调用命令
- google-sheets - 使用条件返回每个组的最大记录
- scala - 密封特征和动态案例对象
- pug - 使用 node 和 pug 传递数组的循环中的动态 var
- python - 在python虚拟环境中安装新版本的cuda对整个系统有影响吗?