如何在mongoDB中使用户的电子邮件独一无二?

Ish*_*han 11 indexing mongodb

我正在收集用户的数据.这将是非常基本的,包括用户的电子邮件,用户的密码(散列)和字符串数组.

{
    email: 'user@example.com',
    password: 'password hash',
    arr: []
}
Run Code Online (Sandbox Code Playgroud)

我想确保不能有两个相同的插入email.我读到_idmongoDB默认是唯一的,它使用一些特殊的数据结构来提高性能.

如何确保email遗骸保持唯一,如果可能,我可以利用该_id领域提供的性能优势吗?

编辑:我还想确保没有null值,email并且没有不包含该email字段的文档.

Sko*_*com 10

您可以通过为电子邮件字段创建唯一索引来完成此操作.

http://docs.mongodb.org/manual/tutorial/create-a-unique-index/

斯科特

  • 此外,您确实应该在应用程序中控制输入.如果您需要一个电子邮件地址,那么在您的应用程序中检查一个电子邮件地址要快得多,如果不是,请将其捕获.不要依赖数据库为您完成. (3认同)

ach*_*uth 9

使用唯一关键字,或者只是将_id值设为电子邮件.

db.collection.createIndex( { email: 1 }, { unique: true } )
Run Code Online (Sandbox Code Playgroud)

  • @Ishan"email"的索引定义中的"1"表示升序(降序为"-1").对于像这样的单个字段的索引,顺序并不重要,因为相同的索引可以有效地用于升序或降序搜索.此外,索引并不暗示字段类型(字符串vs int),也与`_id`字段没有任何关系.你真正想要确保没有任何空值的唯一索引是:`db.collection.ensureIndex({email:1},{unique:true,sparse:true})`. (4认同)

Mik*_*kko 7

Mongodb ensureIndex已被弃用,请createIndex改用。

db.collection.createIndex( { email: 1 }, { unique: true } )