无法将查询应用于Firebase集合

时间:2019-05-08 08:05:34

标签: firebase google-cloud-firestore google-cloud-functions

基本上,我要按用户名(即displayName字段)搜索数据

下面是我的个人资料收藏的样子。

enter image description here

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上已经存在的该应用程序。

0 个答案:

没有答案