0

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

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

4

1 回答 1

2

您可以在设置了 { unique: true } 的电子邮件子字段上定义索引。这将防止电子邮件地址的多个副本存储在集合中。

例如,假设您的文档如下所示:

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})

现在,如果您尝试两次插入相同的电子邮件地址,您将收到错误消息。它还将帮助您优化通过电子邮件地址查找用户的方式,这在您的应用程序中一定会在某些时候有用。

于 2011-02-09T20:41:59.080 回答