Я хочу отфильтровать QuestionCollection на основе tagIDs . Все работает нормально, но , где Arraycontains работает для максимум 10 идентификаторов.
Как я мог бы улучшить свою структуру , чтобы она работала более 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"
|
извлечение вопросов, содержащих указанные c идентификаторы тегов ( завершается неудачей, если идентификаторы тегов больше 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()
}
}