一尘不染

mongoDB / mongoose:唯一,如果不为null

node.js

我想知道是否有办法强制唯一的收集条目, 但前提是条目不为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’选项使电子邮件崩溃(如果有其他用户没有电子邮件)。

现在,我正在应用程序级别解决它,但希望保存该数据库查询。

谢谢


阅读 262

收藏
2020-07-07

共1个答案

一尘不染

从MongoDB v1.8 +开始,您可以通过sparse在定义索引时将选项设置为true 来获得确保唯一值但允许多个文档不包含字段的预期行为。如:

email : {type: String, trim: true, index: true, unique: true, sparse: true}

或在外壳中:

db.users.ensureIndex({email: 1}, {unique: true, sparse: true});

需要注意的是独特的,稀疏索引仍然不允许多个文档与email同一个字段 null,只有多个文档 没有 一个email领域。

参见http://docs.mongodb.org/manual/core/index-
sparse/

2020-07-07