firebase orderbychild equalTo

时间:2017-03-29 12:52:57

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

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

firebase model

按名称搜索用户的代码:

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' } ]

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

1 个答案:

答案 0 :(得分:1)

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

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

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

由于您正在存储用户,因此通常的做法是使用每个用户的UID作为其密钥。

但由于您的用户ID看起来不像Firebase身份验证UID,因此可能会出现同样的问题。在这种情况下,可以继续使用当前的密钥,但在这种情况下,请使用字符串作为前缀,以防止SDK的阵列强制。所以:

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