【发布时间】:2019-11-12 22:52:03
【问题描述】:
假设我有以下场景:
我有多个活动,多个用户可以参加。此外,用户可以参加多个活动。在保持数据一致性的同时存储所需信息的最佳方式是什么?
以下是我的想法以及我不喜欢它们的原因:
collection "events" -> event document -> subcollection "users" -> user document
问题:
每个用户都存在于每个事件上,从而导致每个用户的多个文档。我不能只更新用户信息,因为我需要写入每个相关的事件文档并获取相关的用户文档。
如果试图尽可能减少读/写,那真是一场灾难
例如:
this.afs.collection('events').get().then(res => {
res.forEach(document => {
document.ref.collection('users', ref => ref.where('name', '==', 'Will Smith')).get()
//Change name accordingly
})
})
collection "users" -> user document -> subcollection "events" -> event document
问题:
每个事件都存在于每个用户上,从而导致每个事件的多个文档。 (与第一种情况相同的问题,只是相反)
collection "users" and collection "events" 每个都有用户和事件作为从属于他们的文档。
有一个数组attending_events,其中包含相关的事件ID。
问题:
排序事物的一种 SQL 方式。需要使用forEach() 函数通过单独的查询获取每个文档。
例如
this.afs.collection('events').doc(eventId).get().then(res => {
res.users.forEach(elem => {
this.afs.collection('users').doc(elem.name).get()
//Change name accordingly
})
})
我缺少什么,是否有更好的方法来建模所需的架构?
【问题讨论】:
-
请编辑您的问题并添加您打算执行的查询。
-
请查看更新后的问题。
-
所以你想获取一个用户正在参与的所有事件以及来自特定事件的所有用户,对吗?
-
不,我希望能够更改用户信息或事件信息,而无需获取数百个文档。
标签: firebase google-cloud-firestore modeling