Фильтрация Firebase по нескольким полям - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь получить фильтр Firebase, используя несколько полей. Это более или менее мой объект в Firebase:

{
    "id": "-id",
    "category": "History",
    "level": "High School",
    "pointAmount": 128,
    "pointBoost": 0,
    "photoURL": "link"
},
{
    "id": "-id",
    "category": "Physics",
    "level": "Primary School",
    "pointAmount": 128,
    "pointBoost": 0,
    "photoURL": "link"
}

То, что я сейчас делаю, использует массив флажков в React для захвата level и category для фильтрации. Эта часть сделана. У меня вопрос, как я могу отфильтровать элементы, поступающие из базы данных? Вот как я это делаю прямо сейчас:

componentDidMount() {
    const assignmentsRef = firebase
        .database()
        .ref('Works')
        .orderByChild('available')
        .equalTo(true)
        .limitToFirst(9);
    assignmentsRef.on('value', snapshot => {
        let assignments = snapshot.val();
        let newState = [];
        for (let assignment in assignments) {
            newState.push({
                id: assignment,
                category: assignments[assignment].category,
                level: assignments[assignment].level,
                pointAmount: assignments[assignment].pointAmount,
                pointBoost: assignments[assignment].pointBoost,
                photoURL: assignments[assignment].photoURL,
                workText: assignments[assignment].workText,
            });
        }
        this.setState({
            assignments: newState
        });
    });
}

Итак, как вы видите, я уже делаю orderByChild. Также будет несколько переменных для фильтрации. Например: если я выберу History и Physics, я получу оба объекта. То же самое, если я выберу History и Primary School, но если я выберу Physics, я должен получить только второй объект. Как я могу отфильтровать это? Будет более 10 фильтров.

1 Ответ

0 голосов
/ 05 июля 2018

Похоже, вы пытаетесь выполнить OR обоих условий. Нет встроенной поддержки для возврата предметов, которые соответствуют одному из ряда условий. Вам придется запустить отдельный запрос для каждого условия, а затем объединить результаты всех запросов на стороне клиента. Это не так медленно, как вы могли ожидать, так как Firebase будет направлять запросы по одному соединению .

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