因此,假设RTDB中的每个用户都有一个称为标题的子级。这个孩子的时间是自1970年以来的秒数。现在,您要显示所有具有今天时间戳记的用户。您需要使用今天的时间戳查询所有用户的数据库,因为您不想将所有用户都发送到电话然后进行过滤。
下面,在第一个代码中,我当前将所有用户发送到设备然后进行过滤的方式。第二组代码是我尝试首先查询今天有时间戳的所有用户的位置,即在将所有时间戳发送给用户设备之前。
一个想法是每天自动生成一个Firebase条目,该条目仅代表一天。然后将其与用户的所有时间戳进行比较。我的问题是时区不同。
var dict = CLLocation()
...
dict = CLLocation(latitude: lat, longitude: lon)
...
let thisUsersUid = Auth.auth().currentUser?.uid
self.refArtists2 = Database.database().reference().child("people"); self.refArtists2.observe(DataEventType.value, with: { snapshot in
if snapshot.childrenCount>0{
self.people.removeAll()
for people in snapshot.children.allObjects as! [DataSnapshot] {
if people.key != thisUsersUid {
let peopleObject = people.value as? [String: AnyObject]
let peoplecaption = peopleObject?["caption"] as? Int //is timestamp
let coordSnap12 = people.childSnapshot(forPath: "caption").value as? Int ?? 0
let date = Date(timeIntervalSince1970: TimeInterval(coordSnap12)/1000.0)
//let secondsInDay = 86400
**if Calendar.current.isDateInToday(date)** {
。
var ppp: String! ////this should be the uid of all users in db
let people = Database.database().reference().child("people").child(self.ppp).child("captions")
people.observe(DataEventType.value, with: { snapshot in
let captionss = snapshot.value as? Int ?? 0
let date = Date(timeIntervalSince1970: TimeInterval(captionss)/1000.0)
let query1 = Database.database().reference().child("people").queryOrdered(byChild: "caption").where?(isDateInToday(date))
答案 0 :(得分:0)
正如vadian所说,您将要执行范围查询以获取那些节点。在Firebase Realtime数据库中,您可以使用stepSize
和queryStarting(atValue:)
方法执行此操作,因此它类似于:
queryEnding(atValue:)