【问题标题】:MongoDB, how to manage user related recordsMongoDB,如何管理用户相关记录
【发布时间】:2019-11-20 08:14:07
【问题描述】:

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

假设我是用户,我登录,然后开始添加我的客户和他们的保险。

所以我有 2 个集合相关,客户和保险。

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

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

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

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

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

这样我就可以用这段代码过滤每个查询。

这是个好主意吗?在我看来,这种过滤是对 mongoDB 处理能力的浪费。

如果有人对解决方案有任何想法,甚至有相关文章的链接,那将会很有帮助。

谢谢。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    这更像是一个一般性的权限问题,而不仅仅是一个 MongoDB 问题。此外,如果不了解更多有关您的架构的信息,很难给出具体建议。

    但是,这里有一些方法:

    1) 嵌入子文档

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

    2) 非规范化

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

    3) 外键引用

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

    【讨论】:

    • 好的,我发现我可以保留不相关的保险和客户集合,然后将每条记录的一部分嵌入到相关的用户文档中。这样我就可以得到用户,我会得到一些关于相关数据的信息,比如他的客户的参考资料,并且只有在我需要它们时才使用它们来检索完整的数据
    猜你喜欢
    • 2021-03-21
    • 1970-01-01
    • 2014-06-10
    • 2022-01-18
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多