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)
}
})
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)
}
})
This is my solution for this JSON:
JSON:
{
"users" : {
"-KWGdcdZD8QJSLx6rSy8" : {
"name" : "dummy1",
"visibility" : true
},
"-KWGeGivZl0dH7Ca4kN3" : {
"name" : "dummy2",
"visibility" : false
},
"-KWGeIvWHBga0VQazmEH" : {
"name" : "dummy3",
"visibility" : true
}
}
}
SWIFT:
//Fetch only Childs with attribute "visibility" = true
Database.database().reference().child("users").queryOrdered(byChild: "visibility").queryEqual(toValue: true).observeSingleEvent(of: .value, with: { (snapshot) in
guard let dictionary = snapshot.value as? [String:Any] else {return}
dictionary.forEach({ (key , value) in
print("Key \(key), value \(value) ")
})
}) { (Error) in
print("Failed to fetch: ", Error)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With