По сути, я хочу найти данные по имени пользователя (это поле 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).
выбирает данные на основе хеша Поле.
Но я хочу получить данные на основе 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.