繁体   English   中英

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

[英]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所属的对象。

但是,现在,相同的查询在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解决了我所有的问题。

希望这对其他人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM