我正在尝试在Firebase中创建Users数据库。
结构如下:
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
}
这是可能的,这里是否存在仅查询和接收用户名的解决方案?
谢谢!
答案 0 :(得分:0)
当查询返回一个子节点时,该子节点将包含其下的所有内容。您无法进一步过滤孩子返回。实际上,使用安全规则,一旦您授予对特定子节点的客户端访问权限,客户端就可以隐式访问其中的一切。您不能拒绝访问已被授予访问权限的父节点的子节点。
如果需要通过仅选择必要的子级来限制结果集的大小,则必须将数据复制到仅包含此特定查询所需数据的结构中。这在nosql类型数据库中很常见。好处是读取速度更快,读取次数更小。缺点是存储量较大,您需要使重复项保持同步。