我有一个firebase数据库,其数据如下所示:
我想根据某些条件提取多个记录。我想出了如何使用以下方法根据ID提取一条记录:
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
为nil)。谁能看到我在做什么错?
最佳答案
它为空,因为在检索数据时,您需要遍历数据库并通过每个节点。
您的情况是这样的:
ref.Child("candy");
这里
ref
引用节点Event
,在Event
下,您具有不同的ID(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