Firebase如何在Swift中进行这种查询

时间:2016-03-04 11:35:19

标签: json swift firebase

我有这个JSON结构:

{

  "groups" : {
    "-KBxo9-RoY0eowWKeHkU" : {
      "author" : "rsenov",
      "members" : {
        "-KBxo7ZU6McsmDOxyias" : true,
        "-KBxo8_TUTW6NZze6xcd" : true,
        "rsenov" : true
      },
      "name" : "Prueba 3"
    }
  },
  "users" : {
    "-KBxo7ZU6McsmDOxyias" : {
      "avatar" : "owl2",
      "groups" : {
        "-KBxo9-RoY0eowWKeHkU" : true
      },
      "isUser" : false,
      "name" : "Pepa"
    },
    "-KBxo8_TUTW6NZze6xcd" : {
      "avatar" : "monkey",
      "groups" : {
        "-KBxo9-RoY0eowWKeHkU" : true
      },
      "isUser" : false,
      "name" : "Lolas"
    },
    "rsenov" : {
      "avatar" : "guest",
      "groups" : {
        "-KBxo9-RoY0eowWKeHkU" : true
      },
      "isUser" : true,
      "name" : "Ruben",
    }
  }
}

并且安全和规则文件是:

{
  "rules": {
    ".read": true,
    ".write": true,
    "users": {
      ".indexOn": ["email", "groups"]
    },
    "groups": {
      ".indexOn": ["author", "name"]
    }
  }
}

我试图运行查询以获取ChildChanged快照:

DataService.dataService.USERS_REF.queryOrderedByChild("groups").queryEqualToValue(currentGroup.groupKey).observeEventType(.ChildChanged, withBlock: {snapshot in
        print(snapshot)
    })

DataService.dataService.USERS_REF对应于指向"用户"的网址。密钥,currentGroup.groupKey在这种情况下等于-KBxo9-RoY0eowWKeHkU

根据这个查询,我应该得到已经改变的孩子的快照。例如,如果我替换用户名" Pepa"到"测试",我应该得到快照:

"-KBxo7ZU6McsmDOxyias" : {
  "avatar" : "owl2",
  "groups" : {
    "-KBxo9-RoY0eowWKeHkU" : true
  },
  "isUser" : false,
  "name" : "Test"
}

但这个查询永远不会被调用...... 我的查询中有什么问题吗?

1 个答案:

答案 0 :(得分:0)

"我试图运行查询以获取ChildChanged快照:"有点奇怪。

您可以通过ChildChanged查询数据或观察节点。

如果您只是希望收到有关用户节点内更改的通知,请向该节点添加一个观察者,当Pepa更改为Test时,将通知您的应用并提供已更改的用户节点的快照。

ERROR_UNRECOGNIZED_MEDIA

哦,不需要queryOrderedByChild,因为快照只包含更改的单个节点。