我正在使用Golang和Firego连接到Firebase。我正在尝试使用Email: john@gmail.com
搜索管理员。以下是我的数据库结构
为此,我尝试过:
dB.Child("CompanyAdmins").Child("Info").OrderBy("Email").EqualTo("john@gmail.com").Value(&result)
但它不会产生预期的结果。我怎么能这样做?
答案 0 :(得分:3)
虽然@ dev.bmax已正确识别问题,但解决方案更简单。您可以指定要订购的属性的路径:
dB.Child("CompanyAdmins")
.OrderBy("Info/Email")
.EqualTo("john@gmail.com")
.Value(&result)
更新(2017-02-10):
我刚试过的完整代码:
f := firego.New("https://stackoverflow.firebaseio.com", nil)
var result map[string]interface{}
if err := f.Child("42134844/CompanyAdmins").OrderBy("Info/Email").EqualTo("john@gmail.com").Value(&result); err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", result)
打印:
地图[-K111111:地图[信息:地图[电子邮件地址:john@gmail.com]]]
我放置数据的确切位置。
更新20170213 :
这是我定义的索引:
"CompanyAdmins": {
".indexOn": "Info/Email"
}
如果这对您不起作用,请提供一个我可以测试的类似完整代码段。
答案 1 :(得分:0)
您可以将Info数据直接放入CompanyAdmins结构中吗?这样,您的查询就可以了。
CompanyAdmins -id -Email: "johndon@gmail.com" -Settings: - fields
答案 2 :(得分:0)
您的查询存在的问题是,Info
不是CompanyAdmins
的直接子女。
您可以在插入值时使用电子邮件作为密钥而不是自动生成的密钥。这样,您可以直接访问管理员:
dB.Child("CompanyAdmins").Child("john@gmail.com").Child("Info")
否则,您需要重组数据库。您的订单地址(电子邮件)应该高一级,如Rodrigo Vinicius建议的那样。然后,您的查询将更改为:
dB.Child("CompanyAdmins").OrderBy("Email").EqualTo("john@gmail.com")