我要过滤问题集合基于tagIDs。一切工作正常但是其中数组包含最多适用于 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()
}
}
The whereArrayContains 的文档查询非常具体。它只能处理 10 个数组项:
use the array-contains-any
运算符组合最多 10 个array-contains
同一字段上的子句具有逻辑OR
您应该知道,whereArrayContains 并不会减少计费文档的读取次数。如果您的数组包含 10 个项目,则仍将花费 10 次文档读取。如果执行 10 个 whereArrayContains 查询,每个查询包含 10 个数组项,则仍将花费 100 次读取。
如果您需要 N 个文档,则没有捷径可以使这 N 个文档的读取成本低于 N 个文档读取的成本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)