我试图创建一个网站,使用户能够搜索通过Firebase Firestore中的文档集合。这个过程包括将用户的输入保存为一个状态(useState),并利用useEffect钩子来查询Firebase数据库。
但是,我遇到了一个问题,在使用input.toUpperCase()方法时,查询无法按预期工作。它总是返回集合中的所有文档。奇怪的是,当将文本直接键入消息框而不将其转换为大写时,查询可以正常工作。
下面是相关的代码片段:
useEffect(() => {
const fetch = async () => {
const docRef = collection(db, "CenterBatchLvl");
const m = message.toUpperCase(); // This doesn't work as expected.
const q = query(docRef, where("batch", ">=", m)); // When I use 'message' instead of 'm', it works fine.
const querySnapshot = await getDocs(q);
const names = querySnapshot.docs.map(doc => doc.data().batch);
console.log(querySnapshot.docs.map(doc => doc.data()));
setPossible(names);
}
fetch();
字符串
请帮助我弄清楚为什么在这种情况下使用input.toUpperCase()不起作用,而在没有toUpperCase()方法的情况下直接将文本输入到消息框中会产生所需的结果。
消息状态设置如下
<Input maxW={400} onChange={(e) => { setMessage(e.target.value) }} type="text" />
型
1条答案
按热度按时间blpfk2vs1#
我猜你是想找到以
m
的值**开始的结果。但你的问题是:字符串
这个查询获取索引中的所有文档,按照
batch
的值对它们进行排序,查找第一个以m
的值开始的文档,然后返回之后的所有结果。因此,它返回的结果以m
的值开始,而不仅仅是以m
的值开始的结果。如果你只想要
batch
以m
的值开始的结果,你还需要提供一个结束条件:型
这里的
~
不是魔术运算符,而只是ASCII范围内的高位字符,以便包括之前的所有结果。如果您的
batch
字段包含超出ASCII范围的字符,则需要使用Unicode结束项:型