Schema可以使用它自己的模型来验证吗?

时间:2013-03-04 10:53:09

标签: node.js mongoose

例如,假设我有一个用户架构,我想在尝试将用户保存到数据库之前验证用户名是否唯一。

...

UserSchema.path('username')
  .validate(function (value, respond) {
    User.findOne({ username: this.username }) // This isn't valid.
      .lean()
      .select('_id')
      .exec(function (err, user) {

        if (err) {
          winston.warn('User_username: Error looking for duplicate users');
          respond(false);
        }

        // If a user was returned, then the user is non-unique!
        if (user) {
          respond(false);
        }

        respond(true);
      });
  });

...

var User = mongoose.model('User', UserSchema);

我知道我可以使用mongoose.model('User').findOne(...),但这看起来有点傻,有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

您可以通过设置unique: true在架构中创建唯一索引。这将使用mongodb中提供的唯一索引选项。以下是使用此选项的某个模型的示例代码段:

// The (generated) uniform resource locator
url: {
    // ... which is required ...
    required: true,
    // ... which is an unique index ...
    unique: true,
    // ... and is a string.
    type: String
}

评论中的复合键:

Schema.index({ username: 1, accountCode: 1 }, { unique: true })