【发布时间】:2017-06-08 07:59:20
【问题描述】:
我一直在到处寻找构建特定请求的逻辑,但我并没有完全理解 firebase 的理念。这是我的数据结构:
`users:{
u1_id:{...}
u2_id:{...}
...
},
contacts:{
u1_id:{
contact1_id,
contact2_id,
...
}
}`
我的第一个选项是获取有关用户 ID 的数据的请求,第二个(实际的)是在添加联系人时存储我需要的数据,但我需要运行一个大更新每个用户的每个联系人,这似乎不是正确的解决方案。 (我检查了问题、firebase 文档和视频)
我找到的最接近的解决方案是这个(来自他们的 youtube):
function getUserContacts(key, cb){
const rootRef = firebase.database().ref()
const contactsRef = rootRef.child('contacts')
const usersRef = rootRef.child('users')
contactsRef.child(key).on('child_added', snap => {
let userRef = usersRef.child(snap.key)
userRef.once('value', cb)
})
}
但它给用户 1 比 1,而不是我所有用户的对象
编辑:我的临时解决方案 ->
firebase.database().ref('users')
.on('value', snaps => {
firebase.database().ref(`contacts/${currentUser.uid}`)
.on('value', snapshot => {
let userContacts = []
snapshot.forEach(snapc => {
snaps.forEach(snapu => {
let duser = snapu
if(snapc.key == snapu.key)
{
userContacts.push(snapu.val())
}
})
})
dispatch({
type: CONTACTS_FETCH,
payload: userContacts
})
})
})
【问题讨论】:
-
这是一个相当模糊的问题,至少对我来说,不清楚你在问什么。您首先要获取有关用户 ID 的数据。这意味着什么?你想从 users/user_id_x 节点获取数据吗?第二项说重大更新。那是什么,你要更新什么?
-
感谢您的回答。联系人树仅存储已添加到用户联系人列表中的用户的 ID。我想要的是获取这些用户的详细信息,以便在联系人列表中显示他们。更新问题是在我存储数据而不是每个联系人的 id 的情况下,例如,如果用户更改是昵称,我将不得不更新每个拥有此联系人的用户的所有出现,我希望它变得清晰。
-
目前还不清楚。是否要使用联系信息填充列表。换句话说,读取联系人 ID,遍历列表并加载每个联系人?
-
没错,但我坚持使用 firebase 功能。我可以获取联系人 ID,但我不知道如何在同一函数中获取每个人的详细信息。
-
正如我在上面的评论中提到的;读取我的 id 的......也许进入一个数组,然后立即遍历数组并加载个人联系信息。使用 .value 一次读取联系人 ID 列表。您还可以将用户 ID 添加为属于他们的每个联系人的孩子,并对这些联系人进行查询。
标签: firebase react-native firebase-realtime-database