检查Firebase数组

时间:2017-02-04 20:17:25

标签: javascript angularjs firebase firebase-realtime-database

{
  "accounts" : {
    "-account1" : {
      "email" : "test@example.com",
      "name" : "John doe",
      "online" : false,
      "profilePic" : "example.com/img.png",
      "username" : "jonh_doe"
      "tokens" : [ 
        "token11111", 
        "token22222",
        "token33333"]
    },
    "-account2" : {
      "email" : "testymctest@example.com",
      "name" : "Jane doe",
      "online" : false,
      "profilePic" : "example.com/img.png",
      "username" : "jane"
      "tokens" : [ 
        "token44444", 
        "token55555",
        "token66666"]
    }
  }
}

我的用户数据结构如上,我正在尝试确定-account1是否有一个值为“token11111”的令牌

其他Firebase示例建议使用快照,但我没有找到一个示例,可以深入查看子元素以查找值。

这就是我试过的

firebase.database().ref('accounts/-account1/tokens')
.equalTo(newToken)
.once('value')
.then(function(tokens) {
        if (tokens.exists()) {
        //Token already exists
        }
        else{
        //Push new token to db  
        }
    });

1 个答案:

答案 0 :(得分:3)

当你从Firebase快照中获得一个类似数组的对象时(键是以0开头的数字),你就像常规的JavaScript数组一样处理它:

var ref = firebase.database().ref('/accounts/-account1/tokens');
ref.once('value').then(function(snap) {
  var array = snap.val();
  for (var i in array) {
    var value = array[i]
    console.log(value);
    if (value == 'whatever') { ... }
  }
});

这将迭代并打印每个值。您可以在该循环中查找您喜欢的任何值。或者您可以在JavaScript ES2016中的数组上includes(x)