Я следую этому подходу, чтобы получить 3 случайных документа, которые хранятся в коллекции в Firestore.
Я использую первый подход, чтобы выбрать 3 случайные категории из 8, что работает нормально. Следующим шагом в моем приложении является то, что пользователь нажимает на одну из 3 категорий, и поэтому он должен получить 3 случайных вопроса из выбранной категории и отобразить их во фрагментах, следующих за фрагментом «Выбор категории». Я заметил, что не могу использовать первый подход, так как это приведет к огромному количеству прочтений, поскольку, в конце концов, у каждой категории будет не менее 500 вопросов.
Очевидно, есть более эффективный способ получить случайные вопросы (второй подход), но мне трудно понять это. В нем говорится, что я должен создать другой документ в виде массива, который может содержать все идентификаторы вопросов, но как мне добавить все идентификаторы вопросов в этот массив? Я не знаю, как в итоге будет выглядеть код.
Вот как я хранил свои вопросы:
Когда я правильно понял второй подход Я должен хранить все идентификаторы из вопросов в документе в виде массива, но как мне получить все идентификаторы в массиве? Есть ли другой подход, кроме использования облачных функций? Поэтому мне нужна реализация кода второго подхода, описанного в приведенной выше ссылке, или пример того, как реализовать этот подход.
Любая помощь очень ценится!
Вот код Я за подход:
...
questionRef.document(tvCat1).collection(tvCat1).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<Questions> questionsList = new ArrayList<>();
for (DocumentSnapshot document : task.getResult()) {
Questions question = document.toObject(Questions.class);
questionsList.add(question);
}
int questionListSize = questionsList.size();
List<Questions> randomQuestionsList = new ArrayList<>();
for (int i = 0; i < questionListSize; i++) {
Questions randomQuestions = questionsList.get(new Random().nextInt(questionListSize));
if (!randomQuestionsList.contains(randomQuestions)) {
randomQuestionsList.add(randomQuestions);
if (randomQuestionsList.size() == 3) {
Collections.shuffle(questionsList);
question1 = questionsList.get(0).getQuestion();
question2 = questionsList.get(1).getQuestion();
question3 = questionsList.get(2).getQuestion();
answer1 = questionsList.get(0).getAnswer();
answer2 = questionsList.get(1).getAnswer();
answer3 = questionsList.get(2).getAnswer();
...