基本上,我要按用户名(即displayName字段)搜索数据
下面是我的个人资料收藏的样子。
async localUsers(){
await authorizePromise;
const {radius} = UserStateService.getState();
console.info('Getting local users with radius', radius);
const opts = {
...proximityHashOpts,
...proximityRangeOpts[radius],
...store.position,
};
const hashes = proximityhash.createGeohashes(opts);
const profiles = firebase.firestore().collection('profiles');
let queries = hashes.map(hash => rangeQueryParams(hash))
.map(range => profiles.where('hash', '>=', range.start).where('hash', '<', range.end).get());
const ME = UserProfileStore.getProfile();
const results = await Promise.all(queries);
return []
.concat(...results.map(_ => _.docs))
.filter(_ => !UserProfileStore.isForbiddenRelationship(_.id || _.id === ME.id))
.filter(_ => _.data().visible !== false)
.sort((a, b) =>{
return b.data()['lastSeen'] - a.data()['lastSeen'];
});
}
因此,在localUsers
函数上方,此处从“个人资料”集合中获取数据,而该行where('hash', '>=', range.start).where('hash', '<', range.end).
在 hash 字段的基础上获取数据。
但是我要做的是在 displayName 字段的基础上获取数据并更改查询变量,如下所示。
let queries = hashes.map(hash => rangeQueryParams(hash))
.map(range => profiles
.where('hash', '>=', range.start).where('hash', '<', range.end)
.orderBy('hash')
.orderBy('displayName')
.startAt(username) // username is the value user enters
.endAt(username + '\uf8ff')
.get());
以上查询不返回任何内容。
我知道代码似乎很复杂,对我来说也是一样,因为我正在重新设计Google Play上已经存在的该应用程序。