Firebase Realtime DB нумерация по БД - PullRequest
0 голосов
/ 26 февраля 2020

Я фильтрую товары по марке. Я могу получить идентификатор последнего элемента и использовать его для получения другого списка после нажатия на кнопку загрузки. Однако, когда продукты определенного бренда исчерпаны, он продолжает загружать продукты и других брендов.

firebase.database().ref('products').orderByChild('brand')
            .startAt(brand, lastKey)
            .limitToFirst(31)
            .once("value", function(snapshot){
                var data = snapshot.val()
                ...
})

У меня есть еще одна настройка разбивки на страницы для категорий, и она отлично работает. Останавливается ровно после того, как истощаются все продукты из определенной категории.

firebase.database().ref('products').orderByChild('category/'+type)
                .startAt(type, lastKey)
                .limitToFirst(31)
                .once("value", function(snapshot){
                    var data = snapshot.val()
                    ...
})

Я думаю, что может возникнуть проблема с тем, как я заказываю товары на основе бренда. В то время как бренд содержит строковое значение, категория содержит объект. Realtime DB schema

1 Ответ

1 голос
/ 26 февраля 2020

Вы используете фильтр orderByChild().startAt(), который означает, что Firebase упорядочивает результаты по указанному вами свойству, а затем начинает возвращать результаты с указанного вами узла. Поскольку вы не указываете конечные критерии, он будет возвращать результаты до тех пор, пока не достигнет конца списка.

Если вы хотите иметь только дочерние узлы, чье значение brand совпадает со значением, указанным в startAt(), вы также должны включить условие endAt().

Что-то вроде:

firebase.database().ref('products').orderByChild('brand')
        .startAt(brand, lastKey)
        .endAt(brand+'\uf8ff')
        .limitToFirst(31)

\uf8ff - это только последний печатный символ Unicode, что означает, что список останавливается после этой марки .

...