0

たとえば、ユーザースキーマがあり、ユーザーをデータベースに保存する前に、ユーザー名が一意であることを検証したいとします。

...

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(...)が、それは少しばかげているようです、それを行うためのより良い方法はありませんか?

4

1 に答える 1

1

を設定することで、スキーマに一意のインデックスを作成できますunique: true。これにより、mongodb で利用可能な一意のインデックス オプションが利用されます。このオプションを使用した私のモデルの 1 つからのスニペットの例を次に示します。

// 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 })
于 2013-03-04T11:20:47.317 に答える