Вы можете выполнять фильтрацию в FB RTDB, она не такая сложная или гибкая, как Firestore (вы можете фильтровать только по одному ключу или значению одновременно), но если она так же тривиальна, как ваш пример, то это, безусловно, возможно (вам нужно использовать индексирование для повышения производительности и ограничения загрузки данных при работе).
В такой структуре БД (игнорируйте узлы ниже 'root', которые не являются 'пользователями', я использую это 'root 'узел для нескольких тестов кода во время моей разработки):
и с использованием этого кода (в Flutter / Dart, но те же параметры доступны в других языки):
_referenceRoot
.child("root")
.child("users")
.orderByChild("gender")
.equalTo("male")
.once()
.then(
(DataSnapshot snapshot) {
print("snapshot.value: ${snapshot.value}");
if (snapshot.value != null) {
print("snapshot.key: ${snapshot.key}");
}
},
);
Я получаю этот вывод ie. Только для пользователей мужского пола. Обратите внимание, что на снимке выбранные пользователи не упорядочены:
I / флаттер (4307): snapshot.value: {a2: {волосы: коричневый, пол: мужской, возраст: 20}, a3: {волосы: коричневые, пол: мужской, возраст: 20}, a4: {волосы: коричневые, пол: мужской, возраст: 20}, a6: {волосы: коричневые, пол: мужской, возраст: 20}, a8: {волосы : коричневый, пол: мужской, возраст: 20}, a9: {волосы: коричневые, пол: мужской, возраст: 20}, a0: {волосы: коричневые, пол: мужской, возраст: 20}} I / трепетание (4307) : snapshot.key: users
См. это для получения более подробной информации о том, что возможно: https://firebase.google.com/docs/database/rest/retrieve-data
Итак, чтобы ответить на ваш конкретный c вопрос , если фильтрация, которую вам нужно сделать, тривиальна, я бы использовал только FB RTDB. Если сложнее, то должен быть Firestore. Вам нужно будет посчитать расчетные объемы хранения / загрузки данных по сравнению с вызовами и хранилищем БД, чтобы посмотреть, как минимизировать затраты.