我有一个类似的firestore数据库结构;
如何查询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。
我想念什么吗?
答案 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)
}