【问题标题】:firebase angularfire2 typeahead query not workingfirebase angularfire2 typeahead查询不起作用
【发布时间】:2019-01-20 03:09:21
【问题描述】:

我正在尝试构建一个预先输入的查询。我现在拥有的是返回一个空字符串。我是使用 firebase 的新手,所以不确定我做错了什么。

list(searchString, path) {
    const list: AngularFireList<IdNamePair> = this.fireBase.list(path, ref => ref
        .orderByChild('name')
        .startAt(searchString)
        .endAt('\uf8ff')
    );
    return list;
}

getUsersTypeAhead(searchString: string) {
    return this.list(searchString, '/users').snapshotChanges().pipe(
        map(items => items.map(item => ({
            id: item.key,
            ...item.payload.val()
        })))
    );
}

【问题讨论】:

    标签: javascript angular firebase firebase-realtime-database


    【解决方案1】:

    我认为你应该这样做:

    list(searchString, path) {
        const list: AngularFireList<IdNamePair> = this.fireBase.list(path, ref => ref
            .orderByChild('name')
            .startAt(searchString)
            .endAt(searchString + '\uf8ff')
        );
        return list;
    }
    

    我没有使用 angularfire 对其进行测试,但使用 Javascript SDK 时,以下查询可以正常工作:

    ref
    .orderByChild('name')
    .startAt(searchString)
    .endAt(searchString + '\uf8ff')
    

    【讨论】:

    • 是的,我忘了searchString + '\uf8ff'。你这似乎有效,但仅限于大小写匹配。我有解决办法吗?
    • 您可以做的是“在后台”保存一个带有大写值的额外字段并在该字段上查询。在 NoSQL 世界中,复制数据很常见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2017-07-21
    • 2020-06-06
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多