我刚刚将我的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
}
}
}
答案 0 :(得分:2)
我实际上发现尽管没有文档,displayName充当关键字 - firebase提供给你的用户对象现在提供了displayName属性,但与大多数其他数据库不同,你不能使用displayName在任何其他节点或孩子 - 你可以,但它不可搜索。最后将displayName属性更改为userName解决了我所有的问题。
希望这有助于其他任何人。