Javascript 在Firebase中按距离排序的搜索结果分页
我正在编写Firebase Cloud函数,它接受一个“subject”(例如:math等)参数和“originCoordinate”参数,并返回一个用户列表,这些用户按与原始坐标的距离排序 目前,我的解决方案是:Javascript 在Firebase中按距离排序的搜索结果分页,javascript,firebase,google-cloud-firestore,pagination,google-cloud-functions,Javascript,Firebase,Google Cloud Firestore,Pagination,Google Cloud Functions,我正在编写Firebase Cloud函数,它接受一个“subject”(例如:math等)参数和“originCoordinate”参数,并返回一个用户列表,这些用户按与原始坐标的距离排序 目前,我的解决方案是: 查询教授该科目的所有用户 计算它们与原点坐标的距离 按距离对结果排序 返回10个用户 这是当前的实施方式: let searchResults = [] const originCoordinates = req.params.coordinates const userColle
let searchResults = []
const originCoordinates = req.params.coordinates
const userCollection = db.collection('users')
const searchQuery = userCollection.where('subjectsTaught', 'array-contains', req.params.subject)
searchQuery.get()
.then(data => {
data.forEach(doc => {
const docData = doc.data()
searchResults.push(
{
"username" : docData.username,
"name" : docData.name,
"description" : docData.description,
"avgRating" : docData.avgRating,
"distance" : calculateDistance(originCoordinates, docData.coordinates),
"avatarUrl": docData.avatarUrl
}
)
// Orders results by distance, returns next 10 records using last username as cursor
searchResults = seek_paginate(searchResults, req.params.lastRecordUsername)
});
return res.json(searchResults);
})
.catch(err => console.error(err));
问题是,每次调用此函数时,它都必须查询所有1000名数学导师,占用了大量的文档读取
我想知道是否有更好的方法来做这件事
是否有可能以某种方式将此代码传输到Firestore的索引中,以便我可以使用内置的startAfter()函数对其进行正常分页?如果您想在云函数中使用Firestore分页,则必须安排客户端在调用
startAfter()时发送所需的值。没有简单的方法可以解决这个问题-客户端需要通知后端如何获取所需的数据页