【发布时间】:2021-05-31 06:49:42
【问题描述】:
我正在尝试使用 Flutter 和 Firebase 创建一种社交网络应用程序。
如上图所示,'users' 集合中每个文档的文档 ID 都是自动生成的 ID,
FirebaseAuth 的“uid”存储在每个用户文档的“userId”字段中。
我想添加一个类似于twitter的关注功能的功能。
例如,如果文档 ID 为“4Fo5 ...”的用户关注文档 ID 为“0VkQ ...”的用户
想到的具体方法是
(a) 将“followees”子集合添加到document-id为“4Fo5”的用户的文档中,并将用户“0VkQ”的文档添加到其中,并将“0VkQ”的uid存储在文档中。
(b) 将“followers”子集合添加到文档ID为“0VkQ”的用户的文档中,并将用户“4Fo5”的文档添加到其中,并将“4Fo5”的uid存储到文档中。
(c) (a) 和 (b)。
(问题1)“是否有必要做(c)或(a)或(b)是否足够?”取决于我想在屏幕上显示什么?
或者我可以单独使用 (a)(或单独使用 (b))来完成此操作,而不管我要显示的信息类型如何?
如果可能的话,我想保持较低的firestore使用费,但是(a),(b)和(c)之间会有很大的区别吗?
所以我尝试了做,但是不知道如何在最开始显示的当前数据结构中添加子集合。
我可能需要这样的代码来添加子集合:
instance.collection('users')
.document('4Fo5ovHE2N6NzDLzVyoC')
.collection('followees')
.document('0VkQnHRrjcr5u54oZ5hA').set({
//...
});
'4Fo5ovHE2N6NzDLzVyoC'
'0VkQnHRrjcr5u54oZ5hA'
但是为此我需要获取上面的自动生成的id,有没有办法在这个数据结构中获取自动生成的id?
(await instance.collection('users').where(
'userId',
isEqualTo: _auth.currentUser.uid,
).get()).docs[0].data()
通过上面的代码,我想我可以得到users集合中用户“4Fo5”对应的文档,
但我能得到的类型是 QueryDocumentSnapshot 类型,而不是 DocumentReference 类型。
所以从这里我认为我不能生成一个“followees”子集合。
(问题2)有什么办法吗?
如果没有办法做到这一点,则意味着我们无法将子集合添加到 document-id 为 auto-generated-id 的文档中,
所以如果我们想(或者如果我们必须)使用子集合,我们不应该使用自动生成的ID。对吗?
(问题3)作为替代方案,在用户“4Fo5”的文档的“followee”字段中
[
"O66Ay3xEwxZSjdrMvTfYk9fypj02", //←"0VkQ"'s uid
"TWxyYAy7caWnrfdBxjIOCVkzApi2", //←other followee's uid
]
上面在文档中存储列表的方法也想到了,
但是当我查看 firebase 文档等时,存储列表似乎有问题,
尤其是当关注者数量变多时。
还是不是好办法吗?
【问题讨论】:
标签: firebase flutter google-cloud-firestore