【问题标题】:MongoDB/Mongoose Schema for Accounts with Multiple Users多用户账户的 MongoDB/Mongoose 模式
【发布时间】:2013-12-11 13:29:38
【问题描述】:

我正在寻找有关我正在考虑的 MongoDB 架构的一些建议。我很想得到一些 cmets 和可能的更正。这将适用于有帐户但每个帐户可以有多个用户/管理员的登录系统。每个用户都有他/她自己的登录名,但我正在考虑将所有内容都嵌入到 Account 文档中。每个帐户不会超过 10 个用户(我认为如果必须有 100 个用户,性能仍然不会受到影响)。这是典型文档的外观。

{
    id: ObjectId(),
    modified: date,
    users: {
        user@domain.com:{
            password: hash
        }
    }
}

我不确定是否可以为用户创建类似的子文档,以及通过查找用户的电子邮件和密码来获取帐户信息是否有效。

仍在阅读有关架构设计的信息,但欢迎提供任何反馈。

【问题讨论】:

  • 如果您将用户名存储为字段名称,您将无法进行搜索。做:users: [ { login: "user@example.com", pwd: "hash" }]。然后,您可以在users.login 上编制索引以进行快速查找。但是,我不确定我是否会将所有内容都存储在一个文档中,除非我缺少一些好处......
  • 这里的好处是我需要在用户登录时获取帐户信息,因此查询正在搜索 1 个文档。您仍然建议将它们分成单独的集合吗?
  • 如果这就是过去使用它的方式,那么作为一个文档是有意义的。

标签: mongodb mongoose database-schema


【解决方案1】:

对于这种情况,我更喜欢嵌入而不是链接。您的场景非常适合嵌入。我会创建 2 个模型。其中一个是Account,另一个是User。单独定义用户模型的原因是定义您的用户模型行为。假设您正在使用注册表单将用户添加到指定帐户。当您发布表单时,您可以直接将表单正文发布值转换为 User 模型并将其嵌入到 Account 模型中。我创建了类似的模型;

Account = new Schema({
    users:{
        type:[User],
        required:true
    },
    modified:{
        type:String,
        required:false
    }
});

User = new Schema({
    name:{
        type:String,
        required:true
    },
    email:{
        type:String,
        required:true
    },
    password:{
        type:String,
        required:true
    }
});

您还可以查看 gist here 例如定义。

【讨论】:

  • 如果用户被允许属于多个帐户,这将无法正常工作,所以我现在坚持使用链接。
  • 您可以将用户嵌入到多个帐户中
  • 是的,但是如果有关用户的任何信息发生更改,则需要更新每个帐户。
猜你喜欢
  • 1970-01-01
  • 2013-04-07
  • 2016-09-21
  • 2016-12-02
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 2018-10-18
  • 1970-01-01
相关资源
最近更新 更多