我正在尝试在firebase中创建一个区域词典应用程序。
数据结构图片:Data structure
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
})
答案 0 :(得分:1)
您很可能没有DataSourceRegister
的索引。当没有索引时,服务器将整个位置发送到客户端,然后客户端进行过滤。在这种情况下,您还会在JavaScript控制台中收到非常明确的警告。
请参阅section in the Firebase documentation on how to define indexes。