Ios FIrebase 3查询以返回与子键/值匹配的值

Ios FIrebase 3查询以返回与子键/值匹配的值,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我刚刚将iOS应用程序升级为使用firebase 3,在firebase 2中运行的查询在firebase 3中不再工作 旧的查询编写如下 fireBaseUser.queryOrderedByChild("displayName").queryEqualToValue(friendDisplayName) .observeSingleEventOfType(.Value, withBlock: { snapshot in } 其中friendDisplayName可能是'some

我刚刚将iOS应用程序升级为使用firebase 3,在firebase 2中运行的查询在firebase 3中不再工作

旧的查询编写如下

fireBaseUser.queryOrderedByChild("displayName").queryEqualToValue(friendDisplayName)
      .observeSingleEventOfType(.Value, withBlock: { snapshot in
}
其中friendDisplayName可能是'someguy1',它将返回someguy1所属的对象

但是现在,相同的查询在firebase 3上不返回任何内容。我觉得这是因为firebase 3没有查看子对象本身,而是希望displayName是实际的子对象本身。例如,如果我将其更新到此查询,它将按预期返回

    database.child("0hfTq3CTtFWNFvG0dmea1rAYpoW2").queryEqualToValue("someguy1", childKey: "displayName").observeSingleEventOfType(.Value, withBlock: { snapshot in
}
但很明显,这对我来说不是一个解决方案,因为我不想解析子节点,然后搜索它们等等。。在我看来,一种解决方案是,如果firebase有一个“包罗万象”功能,您可以指定一个类似于

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解决了我所有的问题


希望这对其他人有所帮助。

我也遇到了同样的问题,但我不太了解用户名字段?因此firebase用户对象现在有一个displayName属性-它以前没有,它只使用用户名的电子邮件地址。因此,当您进行搜索时,它不会成为保留关键字。这是来自内存,我不完全记得我是如何解决它的,但基本上,因为displayName是一个保留名称,所以将其更改为userName修复了所有问题。如果你需要我找出一些代码,请告诉我。