如何更新firebase查询?

时间:2016-04-24 08:43:31

标签: swift firebase firebase-realtime-database

在我的应用中发送此查询:

let defaults = NSUserDefaults.standardUserDefaults()
var time: String?

if defaults.valueForKey("chatsLoadedTime") != nil {
    time = "\(defaults.valueForKey("chatsLoadedTime") as! NSDate)"
}
chatsRef.queryOrderedByChild("updatedTime").queryStartingAtValue(time).observeEventType(.Value, withBlock: { snap in

在此查询中,我更新变量time,我想更新此chatsRef查询以从新值time开始。我怎么能这样做?

我的结构是:

user
-userID
--chatRooms
---chatRoomID
----updatedTime
----recieverName
----lastMes
----read
----recieverID

我查询chatRooms,其中up​​datedTime大于传递的时间变量。当我从firebase接收快照时,我更新变量时间并想查询聊天,其中up​​datedTime大于更新的变量时间。

1 个答案:

答案 0 :(得分:2)

看来你要问的是

  

如何查询从特定时间开始的所有chatsRef子节点以及何时发生通知,停止观察该时间,增加时间并观察该时间。

如果我们知道您的Firebase数据结构以及您的完整查询的外观,但看起来您正朝着正确的方向前进,这会有所帮助:

假设你有一个结构

chatsRef
  chat_00
    updated_time: "03"
  chat_01
    updated_time: "07"
  chat_02
    updated_time: "02"

和您的查询

let chatsRef = self.myRootRef.childByAppendingPath("chatsRef")

chatsRef.queryOrderedByChild("updated_time").queryStartingAtValue("02").observeEventType(.Value, withBlock: { snap in

    for child in snap.children {
        if let time = child.value["updated_time"] as? String {
            print(time)
        } 
    }
})

这将返回从02开始的所有子节点,因此输出为

02
07

以及对updated_time为02或更高版本的现有节点的任何未来添加或更改都将返回结果。

因此,如果将一个子项添加到包含updated_time的“chatsRef”节点:“04”,则会自动返回这些结果

02
04
07

请记住.Value返回符合查询条件的所有子节点,因此您需要通过.children迭代它们以获取每个节点的值。