我要使用此值7hmpcTuCAYQAYRqP7RNmnegSd9r2
但是我正在快照中获取所有四个对象。我想获取包含此密钥的父密钥值
7hmpcTuCAYQAYRqP7RNmnegSd9r2
需要获得蓝色标记键。
这是我的代码
let ref = FirebaseManager.refs.databaseRoot.child("new_ChatListMembers")
ref.queryOrdered(byChild: (Auth.auth().currentUser?.uid)!).queryEqual(toValue: true)
ref.observeSingleEvent(of: .value) { (snapshot) in
print(snapshot)
}
此代码返回四个对象,而不是两个。请帮助我如何获取特定数据。 谢谢
答案 0 :(得分:1)
您实际上并没有使用在代码中构造的查询。要使用它,它将类似于:
let ref = FirebaseManager.refs.databaseRoot.child("new_ChatListMembers")
let query = ref.queryOrdered(byChild: (Auth.auth().currentUser?.uid)!).queryEqual(toValue: true)
query.observeSingleEvent(of: .value) { (snapshot) in
print(snapshot)
}
但这实际上并不能很好地扩展,因为您需要为该结构中的每个UID值定义一个索引。简而言之:您当前的数据结构使每个人都可以找到特定聊天室的用户,但这无助于查找特定用户的聊天室。
要允许后者,您需要在数据中添加一个额外的结构:
user_chats: {
"$uid": {
"$chatid": true
}
}
因此,这几乎与您已拥有的东西成反比,这就是为什么它通常被称为反指数的原因。
有关此示例和另一个示例的更多信息,请在这里查看我的答案:Firebase query if child of child contains a value