Я пытаюсь сделать региональное приложение словаря в firebase.
Структура структуры данных: структура данных
OrderByKey и limitToFirst запрос для правильной разбивки на страницы, он загружает только запрошенные данные. Пример кода ниже -
db.ref('dictionary')
.orderByKey()
.startAt(String(this.perpage * (this.page - 1) + 1))
.limitToFirst(this.perpage)
.once('value')
.then((snapshot) => {
vm.words = []
snapshot.forEach(function (childSnapshot) {
var childKey = childSnapshot.key
var childData = childSnapshot.val()
childData.id = childKey
vm.words.push(childData)
})
vm.inProgress = false
})
Но, когда я запрашиваю использование orderByChild('word').equalTo(search_query).limitToFirst(3)
, он извлекает все записи 176023 сразу (проверяется с помощью websocket). Пример кода ниже -
db.ref('dictionary')
.orderByKey()
.orderByChild('word')
.equalTo(this.search + '')
// .startAt(String(25 * (this.page - 1) + 1))
.limitToFirst(3)
.on('value', (snapshot) => {
console.log(snapshot)
snapshot.forEach(function (childSnapshot) {
var childKey = childSnapshot.key
var childData = childSnapshot.val()
childData.id = childKey
vm.words.push(childData)
})
vm.inProgress = false
}, (error) => {
console.log(error)
vm.inProgress = false
})
Скорее всего, у вас нет указателя на word
. Когда нет индекса, сервер отправляет клиенту все местоположение и затем фильтрует его. В этом случае вы также получите достаточно явное предупреждение в своей консоли JavaScript.
См. Раздел документации Firebase о том, как определить индексы.