【问题标题】:Firestore Query documents by string keyFirestore 按字符串键查询文档
【发布时间】:2019-08-05 17:29:18
【问题描述】:

我有一个像这样的 Firestore 数据库结构;

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

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

我在这里查看过堆栈溢出的类似问题,但没有成功。

我还阅读了谷歌关于这样做here 的文档,但是当我运行下面的代码时似乎没有任何效果

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

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


});

我希望返回包含ZkYu6H6ObiTrFSX5uqNb7lWU7KG3 的所有文档的列表作为cargoOwnerId,但它根本不返回任何内容。大小为 0。

我错过了什么吗?

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    您的文档的结构方式,您尝试做的事情是不可能的。当您不知道地图属性的名称时,您无法通过地图属性进行查询。地图属性的名称也必须在所有文档中保持一致。

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

    【讨论】:

    • 非常感谢您指出这一点。我使用的是单个地图,而不是使用地图的字段作为文档字段。
    【解决方案2】:

    这是可能的。

    尝试将 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)
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-06
      • 2020-03-01
      • 2021-09-15
      • 2018-06-26
      • 2020-12-26
      • 2021-05-11
      • 2019-01-09
      • 1970-01-01
      相关资源
      最近更新 更多