【问题标题】:Mongoose getter / setters for normalizing data用于规范化数据的 Mongoose getter / setter
【发布时间】:2012-12-11 00:41:27
【问题描述】:

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

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

我尝试过使用set函数,比如:

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

但是,这个函数似乎没有运行。我基本上需要告诉username_lower_caseusername 是什么,但要小写。

【问题讨论】:

    标签: node.js mongodb express mongoose normalization


    【解决方案1】:

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

    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;
    });
    

    【讨论】:

    • 谢谢!是否在验证之前进行预保存?
    • 我不确定,但我认为当您调用 save 时,验证挂钩会在 pre-save 挂钩之前运行。至少,这是最有意义的。
    猜你喜欢
    • 2011-12-02
    • 2021-11-10
    • 2017-08-06
    • 2020-03-22
    • 2011-03-11
    • 2016-07-23
    • 2012-04-14
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多