使用 AND 恢复查询链接



如何链接Firestore的查询参数。我想动态添加查询参数(以及一些常见的参数(。但它似乎不起作用。这是消防局的限制吗?

在同一行中链接有效:

db.collection("MY_COLLECTION")
                .whereEqualTo("user.firebaseUserId" , FirebaseAuth.getInstance().getUid())
                .whereEqualTo("formId",formId)
                .whereEqualTo("user.active","true")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    FirestoreResponse response = new FirestoreResponse();
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                          //getting results here - works!
                        } else {
                        }
                    }
                });

但是尝试在查询对象引用上添加条件仅根据指定的第一个条件返回结果:

 Query firebaseQuery = collectionReference. whereEqualTo("user.firebaseUserId" , "myuserId"); //only this condition is applied
    firebaseQuery.whereEqualTo("user.active","true");
    if(someCondition){
         firebaseQuery.whereEqualTo("user.smart","true");
    }
firebaseQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                FirestoreResponse response = new FirestoreResponse();
                if (task.isSuccessful()) {
                    //returns results only based on the 1st condition !!
                } else {
                }
            }
        });

这很奇怪,因为 .whereEqualTo 返回一个 Query 对象。

我也尝试使用CollectionReference.get(( - 以及在CollectionReference之前添加查询。

我想出了这个问题 - 我重用了相同的查询对象"firebaseQuery"并在同一对象上调用whereEqualTo。

需要对上一步中的查询对象调用 whereEqualTo,而不是使用第一个查询引用。

    Query firebaseQuery1 = db.collection("MY_COLLECTION")
                    .whereEqualTo("user.firebaseUserId" , "someUserId");
            Query firebaseQuery2 = firebaseQuery1.whereEqualTo("formId",formId);
            Query firebaseQuery3 = firebaseQuery2.whereEqualTo("user.active","true");
 firebaseQuery3.get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    FirestoreResponse response = new FirestoreResponse();
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                          works now !!
                            //}
                        } else {
                        }
                    }
                });

最新更新