【发布时间】:2020-04-26 17:51:17
【问题描述】:
我想根据 tagIDs 过滤 questionCollection 。一切正常,但 whereArraycontains 最多可用于 10 个 id。
我如何改进我的结构,使其能够为超过 10 个tagIDs 工作,同时确保调用尽可能少地访问服务器以减少开支。
Firestore-root
|
--- questions (collection)
| |
| --- qid (documents)
| |
| --- title: "Question Title"
| |
| --- qid: "autogeneratedID"
| |
| --- tagIDs =[tagID_1,tagID_2...tag_IDs_5] // array
|
--- tags (collection)
| |
| --- tagID (documents)
| |
| --- tagName: "Mathematics"
| |
| --- tagID: "autogeneratedID"
|
获取包含特定 tagID 的问题(如果 tagID 大于 10 则失败)
private fun fetchQuestion(tagMap: HashMap<String, String>) {
val tagIDList:MutableList<String> = ArrayList();
for ((key) in tagMap) {
tagIDList.add(key);
}
var query: Query = db.collection(Constants.QUESTION_COLLECTION)
.orderBy(Constants.KEY_QUESTION_ID, Query.Direction.DESCENDING).limit(50)
if(!tagIDList.isNullOrEmpty())
query = query.whereArrayContainsAny("tagIDs", tagIDList);//if list greater than 10 it's not working
query.get().addOnSuccessListener { queryDocumentSnapshots ->
if(!queryDocumentSnapshots.isEmpty){
for (documentSnapshot in queryDocumentSnapshots) {
val question = documentSnapshot.toObject(QuestionBO::class.java)
}
}
}.addOnFailureListener { e ->
toast("No record found.")
e.printStackTrace()
}
}
【问题讨论】:
-
也许您应该重新考虑构建数据的方式。也许您应该有一个单独的集合,而不是拥有一个 tagID 数组,而该集合对于给定的 ID 返回一个 tagID 文档并从那里继续。
-
您找到解决问题的方法了吗?我有同样的问题。
标签: android firebase kotlin google-cloud-firestore