每个用户有多个集合的 Firestore 数据建模
Firestore data modeling with more than one collection for each user
到目前为止,在我的 Fitness 应用程序中,我只有一个集合 users
,每个用户都有自己的文档。并且在此文档中存储了来自一个用户的所有数据。现在我想创建一个新的集合 plans
这样每个计划也都有自己的文档。我该如何处理计划由正确的用户保存的情况?因为现在计划不再保存在用户文档中。或者这是错误的数据建模方式?
class FireBaseHandler {
Future is_user_registered(String email) {
return FirebaseFirestore.instance
.collection('users')
.where('email', isEqualTo: email)
.get();
}
Future register_new_user(email, password) {
print(email + "->" + password);
return FirebaseFirestore.instance.collection("users").doc(email).set(
{
"email": email,
"password": password,
"token": -1,
"plans": [],
},
);
}
我的建议是在收集“计划”下,创建名称与用户 user_id 匹配的文档,并将其数据存储在那里。您可以更轻松地根据 user_id.
创建 select 文档
您可以在每个用户文档中创建一个子集合plans
。结构看起来像这样:
users -> {userId} -> plans -> {planId}
(col) (doc) (col) (doc)
这里每个计划都有专门的文档。这也将阻止您通过不将所有计划都放在同一文档中的数组中来达到 1 MB
max document size。您可以通过以下方式轻松查询用户的所有计划:
FirebaseFirestore.instance.collection('users').doc("userId").collection("plans")
虽然@Dharmaraj 的回答可行,但另请注意,这是一个替代解决方案,您可以在其中使用更扁平的数据库结构。我前几天回答过一个问题叫:
你的情况是:
Firestore-root
|
--- users (collection)
| |
| --- $uid (document)
| |
| --- //user details
|
--- plans (collection)
|
--- $planId (document)
|
--- uid: $uid
通过这种方式,您还可以将每个“计划”作为“计划”顶级集合中的单独文档。
到目前为止,在我的 Fitness 应用程序中,我只有一个集合 users
,每个用户都有自己的文档。并且在此文档中存储了来自一个用户的所有数据。现在我想创建一个新的集合 plans
这样每个计划也都有自己的文档。我该如何处理计划由正确的用户保存的情况?因为现在计划不再保存在用户文档中。或者这是错误的数据建模方式?
class FireBaseHandler {
Future is_user_registered(String email) {
return FirebaseFirestore.instance
.collection('users')
.where('email', isEqualTo: email)
.get();
}
Future register_new_user(email, password) {
print(email + "->" + password);
return FirebaseFirestore.instance.collection("users").doc(email).set(
{
"email": email,
"password": password,
"token": -1,
"plans": [],
},
);
}
我的建议是在收集“计划”下,创建名称与用户 user_id 匹配的文档,并将其数据存储在那里。您可以更轻松地根据 user_id.
创建 select 文档您可以在每个用户文档中创建一个子集合plans
。结构看起来像这样:
users -> {userId} -> plans -> {planId}
(col) (doc) (col) (doc)
这里每个计划都有专门的文档。这也将阻止您通过不将所有计划都放在同一文档中的数组中来达到 1 MB
max document size。您可以通过以下方式轻松查询用户的所有计划:
FirebaseFirestore.instance.collection('users').doc("userId").collection("plans")
虽然@Dharmaraj 的回答可行,但另请注意,这是一个替代解决方案,您可以在其中使用更扁平的数据库结构。我前几天回答过一个问题叫:
你的情况是:
Firestore-root
|
--- users (collection)
| |
| --- $uid (document)
| |
| --- //user details
|
--- plans (collection)
|
--- $planId (document)
|
--- uid: $uid
通过这种方式,您还可以将每个“计划”作为“计划”顶级集合中的单独文档。