我有用户和待办事项。我想查看所有用户的所有待办事项,然后单击一个待办事项时,我想从创建待办事项的用户那里获取信息。同时,我想单击一个用户并查看该特定用户的旧待办事项。
什么是正确的数据存储方式?
我目前正在这样做以检索数据:
todos.id=222
<Link to={'/todos/' + todos.id}>
todos:{
222:{
uid:123,
done:false,
task: buy milk,
timestamp:2019-01-04
}
,
333:{
uid:166,
done:false,
task: buy milk,
timestamp:2019-01-04
}
}
Users:{
123:{
email:'@',
username:'Foo',
oldTodos:{
1:{
done:true,
timestamp:2019-01-01,
task: walk dog,
},
2:{
done:true,
timestamp:2019-01-03,
task: pet cat,
}
}
}
}
firebase
.database()
.ref('todos/' + 222)
.once('value')
.then(function(snapshot) {
var uid = (snapshot.val() && snapshot.val().uid)|| '0'
//uid in this case is 123, and then i doo second call to get user data
firebase
.database()
.ref('users/' + 123)
.once('value')
.then(function(snapshot) {
var username = (snapshot.val() && snapshot.val().username) || '0'
})
})
但是这种感觉并不正确。 最佳做法是什么?
答案 0 :(得分:0)
您可以通过对数据库进行规范化来获得更有效的带宽:
对于用户:
users/{uid}/{
email: ...,
name: ...,
username: ...,
uid: ...,
}
待办事项列表:
user-todos/{uid}/{
done: ...,
task: ...,
timestamp: ...,
}
对于旧的待办事项列表:
user-old-todos/{uid}/{
done: ...,
task: ...,
timestamp: ...,
}
如果您想获得所有用户的所有待办事项:
firebase
.database()
.ref('user-todos')
.once('value')
.then(function(snapshot) {
let allTodos = snapshot.val()
// you will get uid and todo data
})
如果您想获得所有用户的所有待办事项:
firebase
.database()
.ref('user-todos')
.once('value')
.then(function(snapshot) {
let allTodos = snapshot.val()
// you will get uid and todo data
})
如果要获取用户数据:
// use uid from previous query
firebase
.database()
.ref('users')
.child(uid)
.once('value')
.then(function(snapshot) {
let userData = snapshot.val()
// you will get user data
})
如果您想变老的待办事项:
// use uid from previous query
firebase
.database()
.ref('user-old-todos')
.child(uid)
.once('value')
.then(function(snapshot) {
let oldTodos = snapshot.val()
// you will get all old to do list
})