如何仅从 Firebase 查询中获取部分数据集



我正在尝试在Firebase中创建用户数据库。

结构如下:

users: {
    uid: {
        username: exampleName
        email: exampleEmail
        personalInfo: examplePersonalInfo
    }
}

目前,我能够通过执行以下操作从我运行的查询中获取整个数据对象:

db.database.ref('users').orderByChild('username').equalTo('exampleName')
    .once('value').then(handler);

我想查询数据库以确保没有其他人拥有该用户名,但我遇到的问题是我获得了特定 uid 的所有数据。

我只需要用户名,并希望建立规则,其中:

 personalInfo: {
    ".read" = "$uid === auth.uid"
 }

 username: {
     ".read" = true
 }

这是否可能,这里是否有仅查询和接收用户名的解决方案?

谢谢!

当查询返回子节点时,该子节点将包含其下的所有内容。 您无法进一步筛选要返回的子项。 事实上,使用安全规则,一旦您向特定子节点授予对客户端的访问权限,客户端就可以隐式访问其下的所有内容。 您不能拒绝对已授予访问权限的父节点的子节点的访问。

如果需要通过仅选择必要的子项来限制结果集的大小,则必须将数据复制到仅包含此特定查询所需数据的结构中。 这在nosql类型的数据库中很常见。 好处是读取速度更快、更小。 缺点是存储空间较大,您需要保持重复项同步。

最新更新