【问题标题】:firebase orderbychild equalTofirebase orderbychild equalTo
【发布时间】:2017-08-22 23:25:08
【问题描述】:

您好,我正在使用 firebase 构建应用,这是我的 firebase 模型:

按名称搜索用户的代码:

exports.findByUsername = function (username, cb) {

ref.orderByChild("username")
    .equalTo(username)
    .once("value", function (snapshot) {
        records = snapshot.val();

        if (records === null) {
            return cb(null, null); 
        }

        return cb(null, records);
    });

};

我希望在寻找第一个用户时收到一个对象:

 [ 1 ,
  { clubID: 4,
    displayName: 'Jack',
    email: 'jack@example.com',
    id: 1,
    password: 'vasa',
    token: 1,
    username: 'jack' } ]

但我明白了

[  ,
      { clubID: 4,
        displayName: 'Jack',
        email: 'jack@example.com',
        id: 1,
        password: 'vasa',
        token: 1,
        username: 'jack' } ]

有什么问题吗?在寻找第二个用户时,一切都很好。

【问题讨论】:

    标签: node.js firebase firebase-realtime-database


    【解决方案1】:

    您正在使用数字键(1、2、3 等)存储您的用户信息。执行此操作时,Firebase SDK 可能会尝试将结果转换为数组。有关何时执行此操作的说明,请参阅我们的博客文章 Best Practices: Arrays in Firebase

    底线是:不要对 Firebase 中的项目使用数字、顺序键。而是:

    • 如果项目具有自然键,则将它们存储在该自然键下
    • 如果项目没有自然键,请使用 Firebase 推送 ID 作为键

    由于您要存储用户,因此通常使用每个用户的 UID 作为其密钥。

    但由于您的用户 ID 看起来不像 Firebase 身份验证 UID,因此可能会出现同样的问题。在这种情况下,您可以继续使用您当前的密钥,但在这种情况下,在它们前面加上一个字符串,以防止 SDK 的数组强制。所以:

    "Users": {
      "User1": {
        ...
      }
      "User2": {
        ...
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多