Как фильтровать элементы по значению хэш-карты в FireStore - PullRequest
0 голосов
/ 08 октября 2019

У меня есть следующая структура:

Здесь 'subject' - это массив хэш-карт

structure of firestore database document

Теперь я хочучтобы найти все документы с идентификатором = 1 в моей коллекции.

Класс ученической коллекции:

    String name;
    String div;
    String phoneNumber;
    ArrayList<SubjectInStudentModel> subjects=new ArrayList<>();

SubjectInStudent class:

    int id;
    ArrayList<String> dates=new ArrayList<String>();

Что я уже пробовал:

db.collection("student").whereEqualTo("subjects.id", subjectId).get()

возвращает пустой набор документов. Я думаю, поскольку существует несколько хэш-карт, а не одна, этот запрос не выполняется.

Map<String,Integer> test = new HashMap<>();
test.put("id",subjectId);
db.collection("student").whereArrayContains("subjects", test).get()

Это работает, когда в хэш-карте нет «дат».

Аналогично, приведенные ниже коды работают, когдадаты нулевые

SubjectInStudentModel subjectInStudentModel = new SubjectInStudentModel();
subjectInStudentModel.setDates(new ArrayList<String>());
subjectInStudentModel.setId(subjectId);
db.collection("student").whereArrayContains("subjects", subjectInStudentModel).get()

1 Ответ

0 голосов
/ 08 октября 2019

Оператор arrayContains проверяет, существует ли в массиве объект весь , то есть и идентификатор, и даты. Он не может проверить только одно свойство этого объекта.

Чтобы текущая проверка работала, вам нужно передать объект со всеми данными для субъекта.

В качестве альтернативы,Вы можете создать дополнительное поле, в котором вы сохраняете только идентификаторы каждого субъекта (например, subjectIDs), а затем используете arrayContains для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...