Firestore通过字符串键查询文档

时间:2019-08-05 17:29:18

标签: java android firebase google-cloud-firestore

我有一个类似的firestore数据库结构;

Imgur

如何查询auctions集合中具有给定cargoOwnerId的所有文档?

我在项目中使用com.google.firebase:firebase-firestore:20.2.0

在堆栈溢出时,我已经研究过类似的问题,但没有成功。

我还阅读了Google关于here的文档,但是当我运行下面的代码时,似乎没有任何作用

FirebaseFirestore.getInstance()
.collection("auctions")
.whereEqualTo("cargoOwnerId","ZkYu6H6ObiTrFSX5uqNb7lWU7KG3")
.get()
.addOnCompleteListener(task -> {

     Log.d("Logging", "Size: " + task.getResult().size());


});

我希望返回包含ZkYu6H6ObiTrFSX5uqNb7lWU7KG3作为cargoOwnerId的所有文档的列表,但是它什么也不返回。大小为0。

我想念什么吗?

2 个答案:

答案 0 :(得分:1)

无法以文档的结构方式进行操作。当您不知道地图属性的名称时,也无法按地图属性查询。地图属性的名称在所有文档中也必须保持一致。

在文档的顶层,您显然具有一个与文档具有相同ID的字段,即地图。我根本不清楚,为什么要在文档中使用单个地图字段。在我看来,您不想要一个地图,而是希望该地图的所有字段都成为文档字段。这将允许您执行您要查询的查询。也许您在填充文档时犯了一个错误。

答案 1 :(得分:0)

这是可能的。

尝试将task.getResult().size()更改为task.size()

示例:

db.collection("auctions")
        .whereEqualTo("cargoOwnerId","ZkYu6H6ObiTrFSX5uqNb7lWU7KG3")
        .get()
        .addOnSuccessListener { documents ->

            Log.d("Logging", "Size: " + documents.size());


            for (document in documents) {
                Log.d(TAG, "${document.id} => ${document.data}")

            }
        }
        .addOnFailureListener { exception ->
            Log.w(TAG, "Error getting documents: ", exception)
        }