FIrebase 3 查询 return 匹配 child key/value 的值

FIrebase 3 query to return value that matches child key/value

我刚刚升级了我的 iOS 应用程序以使用 firebase 3,并且在 firebase 2 中工作的查询在 firebase 3 中不再工作。

原来的查询是这样写的。

fireBaseUser.queryOrderedByChild("displayName").queryEqualToValue(friendDisplayName)
      .observeSingleEventOfType(.Value, withBlock: { snapshot in
}

其中 friendDisplayName 可能是 'someguy1' 并且会返回 someguy1 所属的 object。

但是现在,相同的查询 returns 在 firebase 3 上什么也没有。我觉得这是因为 firebase 3 本身并没有在 child object 内部查看,它正在寻找 displayName 是实际的 child 本身。例如,如果我将其更新为此查询,它会按预期 returns。

    database.child("0hfTq3CTtFWNFvG0dmea1rAYpoW2").queryEqualToValue("someguy1", childKey: "displayName").observeSingleEventOfType(.Value, withBlock: { snapshot in
}

但显然这对我来说不是一个解决方案,因为我不想解析 child 节点然后搜索它们等等。我看到它的方式是一个解决方案如果 firebase 有一个 'catch all' ,您可以在其中指定一个 child 类似于

database.child(*****).etc

其中****可以是任意值,实际查询时不需要指定。

有谁知道如何解决这个问题?我在下面附上了 firebase JSON 布局。

谢谢!

 {
      "users" : {
        "0hfTq3CTtFWNFvG0dmea1rAYpoW2" : {
          "displayName" : "someguy1",
          "pushOptions" : 1,
          "pushToggle" : false
        },
        "9BATNLBnnoXMOvK4lHtQfmNGJJy1" : {
          "displayName" : "someguy2",
          "pushOptions" : 0,
          "pushToggle" : true
        }
      }
    }

我实际上发现,尽管没有关于它的文档,但 displayName 充当关键字 - firebase 提供给您的用户对象现在提供了一个 displayName 属性,但与大多数其他数据库不同,您可以不要在任何其他节点或子节点中使用 displayName - 可以,但不可搜索。最后将 displayName 属性 更改为 userName 解决了我所有的问题。

希望这对其他人有帮助。