【问题标题】:How to only get partial data set from firebase query如何仅从 Firebase 查询中获取部分数据集
【发布时间】:2019-01-17 18:00:53
【问题描述】:

我正在尝试在 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
 }

这可能吗,这里有解决方案只查询和接收用户名吗?

谢谢!

【问题讨论】:

    标签: firebase firebase-realtime-database angularfire2 firebase-security


    【解决方案1】:

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

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

    【讨论】:

    • 如果我需要的唯一节点是“用户名”,有没有办法查询这个并且只接收用户名节点?由于现在我查询整个用户表的用户节点,我可以查询整个用户表的用户用户名吗?
    • 我的回答是试图解释你不能那样做。
    猜你喜欢
    • 2022-10-04
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2017-07-06
    • 2018-12-06
    • 2023-02-18
    相关资源
    最近更新 更多