我使用云Firestore作为我的数据库,我有users
的集合,其中存储了有关用户的基本信息,如ID,名称,姓氏,电子邮件,公司ID。
我还有companies
的集合,在每个公司我都有tasks
的集合。在每个任务中,我从用户集合中分配了一个用户(用户数据被复制,所以我有与users
集合中相同的用户数据)
问题是当我从集合users
更新用户(更改名称或电子邮件...)时,因为数据被复制,该特定用户的tasks
集合中的数据未更改。
有没有什么方法可以让firestore在users
集合中的用户更新时自动更新到tasks
集合中?
1条答案
按热度按时间qxgroojn1#
这在NoSQL数据库中是一种非常常见的情况,我们经常对数据进行非规范化处理,并且需要使这些数据保持同步。
基本上有两种可能的主要方法:
#1客户端更新
当你更新“用户”文档时,同时更新包含用户详细信息的其他文档(即“任务”)。你应该使用批写来做到这一点:一批写入以原子方式完成,并且可以写入多个文档。
大致如下:
请注意,您需要知道哪些是“包含用户详细信息的其他(“任务”)文档”:你可能需要做一个查询来获取这些文档(以及它们的
DocumentReference
)。#2通过云函数在后端更新
编写并部署一个云函数,当任何“用户”文档被更新时触发,并接受此“用户”文档的值,并更新包含用户详细信息的“任务”文档。
与第一种方法类似,在这种情况下,您还需要知道哪些是包含用户详细信息的“其他”(“任务”)文档。
DocumentReference
包含在“用户”文档中的专用Array字段taskRefs
中。Array成员的数据类型为Reference。您最有可能在前端的“user”文档中设置此
taskRefs
字段的值。使用JS SDK时,可以按照以下方式进行设置: