MongoDB,如何管理与用户相关的记录

时间:2019-07-10 16:40:18

标签: node.js mongodb mongoose

我目前正在尝试通过构建Web应用程序的服务器端来学习Node.js和Mongoodb,该服务器应管理保险代理的保险单据。

因此,假设我是用户,我登录后,便开始添加我的客户及其保险。

因此,我有2个与收藏有关的内容,即“客户和保险”。

我还有一个集合来存储用户的登录数据,我们称它为用户

我不希望新用户看到和修改客户以及其他用户的保险。

如何“划分”每个用户相关记录,以便每个用户只能使用其数据?

我发现实际上可以将创建记录的一个用户的_id添加到每条记录中。

例如,我以自己的身份登录,得到了我的ID“ 001”,我可以在每个客户和保险中添加一个具有此值的字段。

这样,我可以用此代码过滤每个查询。

这是个好主意吗?我认为这种过滤是对mongoDB的处理能力的浪费。

如果某人对解决方案有任何想法,或者甚至有关于该解决方案的文章的链接,这将很有帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

这不仅仅是一个MongoDB问题,更是一个一般性的权限问题。另外,在不了解您的架构的情况下,很难给出具体建议。

但是,这里有一些方法:

1)嵌入子文档

由于MongoDB是一个文档存储,允许您存储任意类似JSON的对象,因此您可以简单地将客户和许可证完全存储在每个用户对象内。这样,查询用户也将返回其客户和许可证。

2)非规范化

NoSQL数据库的常见做法是对相关数据进行非规范化(即重复数据)。这可能包括嵌入一个子文档,该子文档部分表示您的客户/许可证/任何内容。这与上述解决方案具有类似的好处,因为它消除了对子文档的其他查询。它还具有同样的缺点,需要更加小心以保持数据完整性。

3)带外键的引用

这是一种更传统的关系方法,基本上就是您在问题中所建议的内容。根据您希望引用是双向的(两个文档都互相引用)还是单向的(一个文档引用另一个文档),您可以将用户的ID存储为外部user_id字段,也可以存储用户文档中customer_idsinsurance_ids的数组。用关系的话来说,这有时被描述为“有很多”或“属于”(用户有很多客户,客户属于用户)。