首页 文章

引用vs嵌入MongoDB

提问于
浏览
0

我试图弄清楚如何最好地使用MongoDB来处理一个非常小而简单的用例,但是发现文档有些令人困惑 . 我的文档应该代表用户可以拥有许多电子邮件的事实 . 如果我遵循the documentation,最明显和最简单的解决方案是使用嵌入 . 问题是当我想验证电子邮件地址的唯一性时,这是嵌入式AFAIK不可能的(当然我可以使用map / reduce,但它似乎是一个非常糟糕的选择) .

我绝对觉得电子邮件不值得拥有自己的收藏,但显然嵌入式对象不允许我进行验证(如果确实如此,我真的不相信它会有效) . 在这种情况下,您将如何设计架构?

1 回答

  • 2

    您可以使用{unique:true} set在电子邮件子字段中定义索引 . 这将防止电子邮件地址的多个副本存储在集合中 .

    例如,假设您的文档看起来像这样:

    db.users.findOne() => 
    { 
      "name" : "xxxx", 
      "emails" : [ 
         { address: "one@domain.com", validated: false },
         { address: "two@domain.com", validated: true }
      ]
    }
    

    您可以在email.address字段中定义唯一索引,如下所示:

    db.users.ensureIndex(['emails.address',1], {unique: true})
    

    现在,如果您尝试两次插入相同的电子邮件地址,则会出现错误 . 它还可以帮助您通过电子邮件地址优化查找用户,这在某个时刻对您的应用程序非常有用 .

相关问题