我的应用的每个用户都会回答一系列问题。我已经在以下结构中成功地将这些答案写入了我的数据库(是的我!)(参见附件中的图片link to database structure): 数据库结构:
- driverQuestions
- 'userId' (this the UID generated at authentication)
- answers (this is the answer that I need to display in the users profile for future reference
- questions (this is the question that the user has answered)
数据库规则:
{
"rules": {
"driverQuestions": {
"$userId": {
".indexOn": "answers"
}
},
".read": "auth != null",
".write": "auth != null"
}
}
我试图使用以下代码查询我的数据库:
import FirebaseDatabase
import Firebase
import FirebaseAuth
let userId = FIRAuth.auth()?.currentUser?.uid
var ref: FIRDatabaseReference!
ref?.child("driverQuestions").child(userId!).child("answers").queryOrdered(byChild: "answers").queryEqual(toValue: userId).observe(.value, with: { (snapshot) in
let postDict = snapshot.value as? [String : AnyObject] ?? [:]
print(postDict)
我的领事没有打印出来。我认为问题在于userId是唯一的,但我不知道该怎么办....你能告诉我我做错了什么以及我需要做些什么才能得到存储已登录用户的数据库中的答案
如果您需要进一步澄清,请与我们联系
答案 0 :(得分:0)
问题是您正在查询答案节点而不是用户,对于具有键“答案”的子节点,除非您在答案JSON中有更多嵌套节点,否则您的帖子似乎不存在。否则,请更新您的完整数据结构并告诉我们。所以你正在寻找driverQuestions / userId / answers / answers而不是driverQuestions / userId / answers
删除了示例代码,这无关紧要。
尝试此操作以获取在控制台中打印的用户的所有数据:
FIRDatabase.database().reference().child("driverQuestions").child(userId!).observe(.value, with: {snapshot in
let answersData = snapshot.value as? [String:Any] ?? [:]
print(answersData)
})