我希望用户对象保持区分大小写以用于显示目的,但是为了独特的目的而要小写。我的第一个想法是在架构中添加myFunction
属性并尝试预保存挂钩:
usernameDisplay
但这似乎不起作用。 var userSchema = new Schema({
username: {
type: String,
required: true,
unique: true,
lowercase: true
},
usernameDisplay: String,
password: {
type: String,
required: true
}
});
userSchema.pre("save", function (next) {
this.usernameDisplay = this.username;
next();
});
和username
属性都保存为小写用户名。
我认为以下方法可行:删除架构中的usernameDisplay
验证并执行此操作:
lowercase
但现在我很好奇Mongoose如何对传入数据进行小写验证/更改。
如果我的问题不明确,请告诉我,为了清楚起见,我可以尝试更新。
答案 0 :(得分:0)
首先,我不认为mongoose有一个小写验证,似乎相当具体。
其次,你的方法对我来说似乎很好。但是我建议使用mongoose虚拟(这是virtuals application的教科书示例)。 简短参考:虚拟是每次都不存储但计算的字段。所以你可以做这样的事情
userSchema.virtual('userDisplayName').get(function(){
return this.username. toLowerCase();
});
使用" userDisplayName"将是透明的,但不会存储该字段。
最后但同样重要的是,关于您的代码,由于此行
,它会在数据库中保存相同的数据this.userDisplayName = this.username;
您正在为同一参考分配2个名称,因此更改一个会更改另一个名称。而是试试这个。
this.userDisplayName = this.username.toLowerCase();
next();
希望有所帮助
答案 1 :(得分:0)
您可以在猫鼬模型中应用小写:
stuff: { type: String, lowercase: true, trim: true }