К сожалению, вы можете отфильтровать ваши элементы, используя только один whereArrayContains()
вызов метода. Если вы будете использовать более одного, произойдет следующая ошибка:
Причина: java.lang.IllegalArgumentException: недопустимый запрос. Запросы поддерживают только наличие одного фильтра, содержащего массив.
Если вам нужно отфильтровать более одного свойства, вам нужно изменить логику структурирования вашей базы данных, создав свойство для каждого отдельного фильтра, который вы используете, а затем связав whereEqualTo()
вызовы методов. Я знаю, это звучит немного странно, но так работает Cloud Firestore.
Ваша схема должна выглядеть так:
documentId: {
"computer": true,
"internet": true,
"ps4": true,
"switch": true
}
Чтобы найти все элементы, которые "gears", "internet" and "switch"
, вы должны использовать запрос, который выглядит следующим образом:
Query query = yourCollectionRef.
.whereEqualTo("gears", true)
.whereEqualTo("internet", true)
.whereEqualTo("switch", true);
Вы также можете сохранить эти фильтры на карте, как показано в следующей схеме:
documentId: {
gears: {
"computer": true,
"internet": true,
"ps4": true,
"switch": true
}
}
И соответствующий запрос должен выглядеть так:
Query query = yourCollectionRef.
.whereEqualTo("gears.gears", true)
.whereEqualTo("gears.internet", true)
.whereEqualTo("gears.switch", true);