Firebase - 如何使用自动生成的ID查找所有匹配项,其中值为false

时间:2016-03-27 17:46:37

标签: javascript firebase firebase-realtime-database

遵循https://www.firebase.com/docs/web/guide/structuring-data.html

上的技巧

鉴于网址为:https://myApp.firebaseio.com

数据是:

  // Tracking two-way relationships between users and groups
  {
    "users": {
      "mchen": {
        "name": "Mary Chen",
        "groups": {
           "alpha": true,
           "bob": false, // <- I want this
           "charlie": true,
           "dave": false // <- I want this
        }
      },
      ...
    },
    "groups": {
      "alpha": {
        "name": "Alpha Group",
        "members": {
          "mchen": true,
          "hmadi": true
        }
      },
      ...
    }
  }

是否可以构建Firebase查询以查找用户“mchen”具有值'false'的所有组(基本上我想要bob和dave)?怎么样?

e.g。新的Firebase('https://myApp.firebaseio.com/users/mchen/groups')...

在我的真实代码中,alpha,bob,charlie和dave是Firebase自动生成的密钥,但同样的查询应该可以解决我的问题。 (我正在使用Firebase Web版本)

提前致谢。

1 个答案:

答案 0 :(得分:0)

终于搞定了。我不是专家,但我希望这可以帮助任何不熟悉Firebase的人:

如果您只使用Firebase:

var ref = new Firebase('https://myApp.firebaseio.com/users/mchen/groups');
ref.orderByValue().equalTo(false).on('value', function(data){
  console.log(data.val());
})

如果您使用AngularFire:

var ref = new Firebase('https://myApp.firebaseio.com/users/mchen/groups');
$firebaseArray(ref.orderByValue().equalTo(false)).$loaded().then(function(data){
  console.log(data);
});

注意:

  • orderByValue()是在不知道密钥的情况下使用的
  • 使用equalTo(false),not equalTo('false')
  • $ firebaseArray是返回多项的,而不是$ firebaseObject

性能也需要规则:

{
  "rules": {
    "users": {
      "$userName": { // A better way would be using an auto-generated ID in here
        "groups": {
          ".indexOn" : ".value" // add index on the value - notice it's .value
        }
      }
    }
  }
}