我想知道是否有办法强制唯一的收集条目, 但前提是条目不为null 。e示例架构:
var UsersSchema = new Schema({ name : {type: String, trim: true, index: true, required: true}, email : {type: String, trim: true, index: true, unique: true} });
在这种情况下,不需要’email’,但是如果保存了’email’,我想确保该条目是唯一的(在数据库级别)。
空条目的值似乎为’null’,因此每个条目都不会通过’unique’选项使电子邮件崩溃(如果有其他用户没有电子邮件)。
现在,我正在应用程序级别解决它,但希望保存该数据库查询。
谢谢
从MongoDB v1.8 +开始,您可以通过sparse在定义索引时将选项设置为true 来获得确保唯一值但允许多个文档不包含字段的预期行为。如:
sparse
email : {type: String, trim: true, index: true, unique: true, sparse: true}
或在外壳中:
db.users.ensureIndex({email: 1}, {unique: true, sparse: true});
需要注意的是独特的,稀疏索引仍然不允许多个文档与email同一个字段 值 的null,只有多个文档 没有 一个email领域。
email
null
参见http://docs.mongodb.org/manual/core/index- sparse/