我是Firebase和noSQL数据库的新手。我已经阅读了文档并观看了教学视频,但是有一个我尚未完全掌握的概念。
为什么查询数据库需要一个监听器,例如.on(“ value”)?
由于只要类型发生变化(创建节点,编辑节点,创建子节点),就会触发这些侦听器,是否应该有一种更直接的方法来从db获取数据?如
ref.orderBy("age"). equalTo(30).get()
一种方法,可以在执行指令时只获取其中的内容,而不必监听某种事件?
在SQL中,您不必等待数据库中的某些更改才能使此查询起作用:
SELECT * FROM TABLE WHERE X == Y
PS:我知道.once()也存在,但我的问题更多是:如果我的数据库从未更改,我将如何查询它并始终获得相同的查询结果/快照?
答案 0 :(得分:1)
您尚未定义平台,因此我将使用此Swift伪代码示例。假设我们想一次获得所有用户的列表。
let usersRef = my_firebase.child("users")
usersRef.observeSingleEvent(by: .value, with: { snapshot in
//all users are returned to the app in the snapshot
// .value means 'give me everything in the specified node'
// so then we can iterate over the snapshot to get each users data
}
您可以随时调用上述代码来获取用户列表,并且不会在节点上添加观察者(侦听器)。一口气。
如果希望收到添加
用户的通知,let usersRef = my_firebase.child("users")
usersRef.observe(by: .childAdded, with: { snapshot in
//upon first calling this, each user will be sent to the app in the snapshot
// and after that, any user that's added
}
以上代码将观察者(侦听器)附加到用户节点,并且每当添加用户时,便会通过快照将其提供给应用。
请注意,使用.observeSingleEvent与.observe和.value来获取节点中的所有内容,而使用.childAdded来获取特定节点。