7

我有一个包含字段的User架构。username我希望此字段区分大小写,以便用户可以注册名称,例如BobDylan. 但是,我需要我的架构来验证新条目以检查没有重复的、区分大小写的,例如bobdylan.

我的研究告诉我,我应该在模式中创建一个附加字段来存储小写/大写版本,以便我可以轻松检查它是否是唯一的。我的问题是,我将如何使用 Mongoose API 实现这一点?

我尝试过使用一个set函数,例如:

UserSchema.path('username_lower_case').set(function(username_lower_case) {
  return this.username.toLowerCase()
});

但是,此功能似乎没有运行。我基本上需要告诉username_lower_case它是什么username,但要小写。

4

1 回答 1

10

一种方法是使用预保存挂钩来执行此操作。

UserSchema.pre('save', function (next) {
    this.username_lower_case = this.username && this.username.toLowerCase();
    next();
});

另一种方法是制作username一个虚拟的:

UserSchema.virtual('username').set(function (value) {
    this.username_raw = value;
    this.username_lower_case = value && value.toLowerCase();
}).get(function () {
    return this.username_raw;
});
于 2012-12-24T18:05:45.497 回答