Colby Gatte Colby Gatte - 27 days ago 20
iOS Question

Querying Firebase with Swift 3.0

I am trying to get all the entries where "createdAt" is equal to "Today", but it returns nothing.

What am I doing wrong here? And, what is the proper way to query data the way I am trying to do?

JSON:

{
"thoughts" : {
"-KWGdcdZD8QJSLx6rSy8" : {
"createdAt" : "Tomorrow",
"thought" : "meno",
"user" : "ET9tYfHqThNTsLG4bZGIbuLGauu2"
},
"-KWGeGivZl0dH7Ca4kN3" : {
"createdAt" : "Today",
"thought" : "meno",
"user" : "ET9tYfHqThNTsLG4bZGIbuLGauu2"
},
"-KWGeIvWHBga0VQazmEH" : {
"createdAt" : "Yesterday",
"thought" : "meno",
"user" : "ET9tYfHqThNTsLG4bZGIbuLGauu2"
}
}
}


Swift:

let db = FIRDatabase.database().reference().child("thoughts")
let ref = db.queryEqual(toValue: "Today", childKey: "createdAt")

ref.observe(.value, with:{ (snapshot: FIRDataSnapshot) in
for snap in snapshot.children {
print((snap as! FIRDataSnapshot).key)
}
})

Answer

You need to use queryOrderedByChild to createdAt and than use equalTo Today

let ref = FIRDatabase.database().reference().child("thoughts").queryOrdered(byChild: "createdAt").queryEqual(toValue : "Today")

ref.observe(.value, with:{ (snapshot: FIRDataSnapshot) in
    for snap in snapshot.children {
        print((snap as! FIRDataSnapshot).key)
    }
})