如何使用Golang在Firebase中搜索特定值?

I am using Golang and Firego for connecting to Firebase. I am trying to search an admin with Email: john@gmail.com. The following is my Database Structure

My Firebase Database Structure

For this I have tried:

  dB.Child("CompanyAdmins").Child("Info").OrderBy("Email").EqualTo("john@gmail.com").Value(&result)

but it does not produce expected result. How can I do this?

While @dev.bmax has the problem identified correctly, the solution is simpler. You can specify the path of a property to order on:

  dB.Child("CompanyAdmins")
    .OrderBy("Info/Email")
    .EqualTo("john@gmail.com")
    .Value(&result)

Update (2017-02-10):

Full code I just tried:

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
", result)

This prints:

map[-K111111:map[Info:map[Email:john@gmail.com]]]

Which is the exact place where I put the data.

Update 20170213:

This is the index I have defined:

  "CompanyAdmins": {
    ".indexOn": "Info/Email"
  }

If this doesn't work for you, please provide a similarly complete snippet that I can test.

Can you put Info data directly into CompanyAdmins structure? This way, your query will work.

CompanyAdmins
    -id
       -Email: "johndon@gmail.com"
       -Settings:
            - fields

The problem with your query, is that Info is not a direct child of CompanyAdmins.

You could use the email as the key instead of an auto-generated one when you insert values. That way, you can access the admin directly:

dB.Child("CompanyAdmins").Child("john@gmail.com").Child("Info")

Otherwise, you need to restructure the database. Your order-by field (email) should be one level higher, like Rodrigo Vinicius suggests. Then, your query will change to:

dB.Child("CompanyAdmins").OrderBy("Email").EqualTo("john@gmail.com")