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

时间:2016-05-25 03:17:10

标签: ios swift firebase firebase-realtime-database

我刚刚将我的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
        }
      }
    }

1 个答案:

答案 0 :(得分:2)

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

希望这有助于其他任何人。