Firebase查询返回随机用户数据,而不是过滤后的用户数据

fhity93d  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(123)

我试图从“users”集合中获取数据,其中用户的名称匹配/部分匹配searchQuery。我的用户文档现在只有3个字段,www.example.com www.example.com 3.uid。1.name下面是代码片段:2.email 3.uid. Im working with firebase for the first time. Help is much appreciated. Here is the code snippet:

const results: TeamMemberData[] = [];
        const usersRef = collection(db, "users");
        const q = query(usersRef, where("name", ">=", searchQuery));
        const querySnaphot = await getDocs(q);
          querySnaphot.forEach((doc) => {
            console.log(doc.data()); // this logs random user data 

            if (currentUser?.email !== doc.data().email)
              results.push({
                name: doc.data().name,
                email: doc.data().email,
                uid: doc.data().uid,
              });
          });

im logging the results here我希望得到的结果数组将只有那些用户的名字匹配在firestore文档中.我只输入'g',但我得到了四个用户,其中,三个甚至没有'g'在他们的name属性.

uhry853o

uhry853o1#

你有随机的用户,因为你使用">="作为查询操作符,看看here如何使用字符串。
在示例中,您需要使用==操作符:

const q = query(usersRef, where("name", "==", searchQuery));

或者可以使用array-contains操作符:

const q = query(usersRef, where("name", "array-contains", searchQuery));

此查询返回名称字段是包含searchQuery的数组的每个用户文档。如果数组具有您查询的值的多个示例,则该文档仅包含在结果中一次。

nnsrf1az

nnsrf1az2#

你也可以尝试“in”,因为包括:

const q = query(usersRef, where("name", "in", [searchQuery]));

相关问题