首页 > 解决方案 > 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 身份验证,并作为字符串存储为文档中的字段。我在这里错过了什么吗?

预先真诚地感谢您。

在此处输入图像描述

标签: javaandroidgoogle-cloud-firestore

解决方案


此查询始终不会返回任何文档。它实际上是要求所有 uid 字段大于小于某个值的文档,这是一个不可能满足的条件。Firestore 查询中的过滤器在逻辑上是“与”在一起的。它们在逻辑上不是 OR'd。 Firestore 不支持查询中的逻辑 OR

听起来您想执行两个单独的查询,然后在客户端中合并结果。一个查询将有whereLessThan("uid", user.getUid()),另一个whereGreaterThan("uid", user.getUid()). 但老实说,您可能更容易获取集合中的所有文档,然后手动过滤掉您不想要的文档。


推荐阅读