如何通过用户名从 firebase 中查找用户?

How to find a user from firebase by username?

所以我写了一个方法来查看我的 firebase firestore 数据库中的所有用户,它看起来像这样:

usernameTaken: async (name) => {
        await db.collection("users").get().then(querySnapshot => {
            querySnapshot.forEach(documentSnapshot => {
                if (documentSnapshot.data().username === name) {
                    return true;
                }
            });
        });
        return false;
    }

我的数据是按用户id列出的,直接文档字段之一是用户名。您可能会说,查看每一个文档以找到匹配的用户名效率非常低,我想知道是否有办法使它更有效率?目标是阻止和匹配用户名,以便在我的应用程序中人们没有相同的用户名。非常感谢任何帮助,谢谢!

实现此目的的最佳方法是像这样在“用户”中创建 user_id 容器的名称,并将此名称用作与所述用户相关的任何内容的唯一标识符。 '''

|- users
|-- unique_janedoe
|--- address
|--- email 
|-- unique_johndoe
|--- address
|--- email

''' 您的另一个选择是制作一个单独的文件夹,其中包含所有用户名的列表,每次将用户添加到数据库时都会填充该列表。

在您当前的结构中,您需要使用查询来查找文档:

usernameTaken: (name) => {
    return db.collection("users").where("username", "==", name).get().then(querySnapshot => {
        return !querySnapshot.empty;
    });
}

更好的方法是按照 dagarcia 在 their answer 中的建议更改您的数据模型,使用用户名作为文档 ID。由于文档 ID 在集合中是唯一的,使用用户名作为文档 ID 自动保证每个名称也是唯一的。