Как получить несколько записей из Firebase? - PullRequest
0 голосов
/ 28 марта 2019

У меня есть база данных Firebase с данными, подобными приведенным ниже: enter image description here

Я хочу получить несколько записей на основе определенных критериев.Я выяснил, как получить одну запись на основе идентификатора, используя метод ниже:

ref := fbDB.NewRef("/Event/123")
event := data.EventData{}
if err := ref.Get(c, &event); err != nil {
   // error handling stuff
}

Это загружает event с данными, которые я ожидал.Когда я пытаюсь изменить этот код, чтобы выбрать несколько записей с кодом ниже:

type EventResults struct {
    Events []data.EventData
}
...
ref := fbDB.NewRef("/Event")
res := EventResults{}
if err := ref.Child("candy").OrderByValue().StartAt(350).Get(c, &res); err != nil {
   //error handling stuff
}

res.Events всегда пустой массив (а err равен нулю).

Кто-нибудь может увидеть, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Это пусто, потому что при получении данных вам нужно пройти через базу данных и пройти через каждый узел.

В вашем случае у вас есть это:

ref.Child("candy");

Здесь ref ссылается наузел Event и под Event у вас разные идентификаторы (123, 789), поэтому вам необходимо получить доступ к этим узлам, прежде чем пытаться получить доступ к узлу candy.


Если вы хотите получить список candy, который находится под Event, то вы должны выполнить итерации внутри прямого потомка узла Event, тогда вы сможете получить доступ к узлу candy.

Пример:

f := firego.New("https://my-firebase-app.firebaseIO.com", nil)
var res map[string]interface{}

ref := fbDB.Ref("/Event")
if err := ref.OrderBy("candy").StartAt(3).Value(&res); err != nil {

}

Вам нужно использовать запрос OrderBy, чтобы иметь возможность получить результат на основе значения candy.Например, в моем коде OrderBy("candy").StartAt(3) этот запрос даст вам результат, где значение candy начинается с 3. candy :300

Проверьте документы:

https://godoc.org/gopkg.in/zabawaba99/firego.v1

0 голосов
/ 29 марта 2019

Это в основном то, что Питер опубликовал выше, но точный код, который я использовал, приведен ниже:

ref := fbDB.NewRef("/Event")
var res map[string]data.EventData

if err := ref.OrderByChild("candy").StartAt(350).Get(c, &res); err != nil {
    //Error handling stuff
}
...