Firebase Cloud Firestore查询whereEqualTo供参考

时间:2018-06-27 03:25:54

标签: android firebase google-cloud-firestore

我正在尝试使用Java for Android开发创建一个查询,该查询仅选择其引用等于给定引用的文档。它将匹配的文档包含路径“ / users / someUser”的引用。我正在创建引用,如下所示:

DocumentReference ref = mDatabase.document("users/someUser");

我也尝试过:

DocumentReference ref = mDatabase.document("/users/someUser");

然后查询:

Query query = mDatabase.collection("myCollection").whereEqualTo("refField", ref).limit(10); 

但是,当我运行查询并在onComplete方法中检查task.isSuccessful()时,它没有通过,即不起作用,而当我删除.whereEqualTo()时,它通过了并且任务的结果不为空。如何正确使用.whereEqualTo()检查包含特定参考的所有文档?

应与我的查询匹配的文档示例为:

/myCollection/GDpojS5koac2C7YlIqxS,其中包含以下字段:
refField: /users/someUser(类型引用的值)

与我的查询不匹配的文档示例为:

/myCollection/J5ZcVAMYU1nI5XZmh6Bv,其中包含以下字段:
refField: /users/wrongUser(类型引用的值)

2 个答案:

答案 0 :(得分:0)

我认为您需要添加get()方法来运行查询并添加onCompletionListener。

类似的事情应该起作用:

mDatabase.collection("myCollection")
  .whereEqualTo("refField", ref)
  .limit(10)
  .get()
  .addOnCompleteListener({task ->
                         if(task.isSuccessful){
                            val result = task.result                 
                        })

上面的示例在kotlin中,但是我想在java中是类似的

答案 1 :(得分:0)

您不必担心文档,如果您基于字段创建查询,则所有文档都将返回到“ QuerySnapshot”对象中, 例如,

CollectionReference collectionReference = db.collection(FIRESTORE_USERS);
                DocumentReference documentReference = collectionReference.document(userID);
                CollectionReference notificationCollection = documentReference.collection(FIRESTORE_NOTIFICATIONS);

    notificationCollection.whereEqualTo(USER_TYPE, userType)
                        .whereGreaterThanOrEqualTo(SEND_AT, calendar.getTime())
                        .get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                    @Override
                    public void onSuccess(QuerySnapshot documentSnapshots) {
                        List<DocumentSnapshot> snapshotsList = documentSnapshots.getDocuments();
                        ArrayList<NotificationCollections> notificationCollectionsArrayList = new ArrayList<>();
                        for (DocumentSnapshot snapshot : snapshotsList) {
                       // each document having that particular field based on query
    }
    }});

在上面的示例中,我正在获取所有与特定用户ID匹配且时间大于或等于所提供时间的文档(在您的情况下将不使用时间)

我希望这对您有帮助...

快乐编码:)