Firebase:观察childAdded返回现有/旧记录?

big*_*ato 1 firebase swift firebase-realtime-database

我有一个查询(用swift编写):

    FIRDatabase.database().reference(withPath: "\(ORDERS_PATH)/\(lId)")
      .child("orders")
      .observe(.childAdded, with: { firebaseSnapshot in

      let orderObject = firebaseSnapshot.value as! [String: AnyObject]

      let order = AppState.Order(
        title: orderObject["name"] as! String,
        subtitle: orderObject["item_variation_name"] as! String,
        createdAt: Date(timeIntervalSince1970: TimeInterval(orderObject["created_at"] as! Int / 1000)),
        name: "name",
        status: AppState.Order.Status.Pending
      )

      f(order)
    })
Run Code Online (Sandbox Code Playgroud)

我的数据库看起来像这样:

在此输入图像描述

我希望它只是听所有新的订单.但是,每次它最初加载时,它都会获取一堆现有的订单,这不是我想要的.

我created_at在每个订单上都有一个(一个表示该时间的int,例如1478637444000),所以如果有一个解决方案可以利用它也可以.

我的查询有问题吗?

Jay*_*Jay 7

观察者总是开火一次并读入"所有数据".

.value观察者一次读入节点中的所有内容,其中作为.childAdded观察者(来自文档)

每个现有子项触发此事件一次,然后每次将新子项添加到指定路径时再触发该事件.

如果您考虑自己的问题,那么您实际需要的是所有数据的子集.这是通过查询实现的.

您的查询将是观察在某个时间戳之后发生的所有.childAdded事件.这就是你需要做的!

使用queryStartingAtValue(开始时间戳)创建一个观察查询,它将返回在该时间戳之后添加的所有子项.