我的用户查询为我提供了我输入的字母下方的所有数据
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
(及其兄弟 startAfter
、endAt
和 endBefore
)操作允许您获取数据的 切片 。因此,您当前的查询告诉数据库在其 username
字段上对文档进行排序,然后 开始返回 文档开始于 at search
在结果中。
您要做的是查找 username
以 和您指定的值 开头的文档,这是不同的操作。如果要使用切片运算符,可以通过添加 endAt
:
firebase.firestore()
.collection('users')
.orderBy('username')
.startAt(search)
.endAt(search+"\uf8ff")
\uf8ff
只是最后一个已知的 Unicode 字符,因此它为您提供了一段以 和 search
项开头的数据。
我正在尝试对输入进行参数搜索,当我进行用户搜索时,我的查询将我输入的字母下方的所有数据都显示出来,有人可以解释我做错了什么吗?
搜索查询
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
(及其兄弟 startAfter
、endAt
和 endBefore
)操作允许您获取数据的 切片 。因此,您当前的查询告诉数据库在其 username
字段上对文档进行排序,然后 开始返回 文档开始于 at search
在结果中。
您要做的是查找 username
以 和您指定的值 开头的文档,这是不同的操作。如果要使用切片运算符,可以通过添加 endAt
:
firebase.firestore()
.collection('users')
.orderBy('username')
.startAt(search)
.endAt(search+"\uf8ff")
\uf8ff
只是最后一个已知的 Unicode 字符,因此它为您提供了一段以 和 search
项开头的数据。