我的用户查询为我提供了我输入的字母下方的所有数据

My users query is bringing me all the data below the letter I type

我正在尝试对输入进行参数搜索,当我进行用户搜索时,我的查询将我输入的字母下方的所有数据都显示出来,有人可以解释我做错了什么吗?

搜索查询

const fetchUsers = (search) => {
        firebase.firestore()
            .collection('users')
            .orderBy('username')
            .startAt(search)
            .get()
            .then((snapshot) => {
                let users = snapshot.docs.map(doc => {
                    const data = doc.data();
                    const id = doc.id;
                    return { id, ...data }
                });
                setUsers(users);
            })
    }

结果

您看到的是预期的行为。 startAt(及其兄弟 startAfterendAtendBefore)操作允许您获取数据的 切片 。因此,您当前的查询告诉数据库在其 username 字段上对文档进行排序,然后 开始返回 文档开始于 at search 在结果中。

您要做的是查找 username 和您指定的值 开头的文档,这是不同的操作。如果要使用切片运算符,可以通过添加 endAt:

firebase.firestore()
    .collection('users')
    .orderBy('username')
    .startAt(search)
    .endAt(search+"\uf8ff")

\uf8ff 只是最后一个已知的 Unicode 字符,因此它为您提供了一段以 search 项开头的数据。