将属性添加到mongoose文档预小写验证

时间:2016-10-06 19:32:15

标签: javascript node.js mongoose

我希望用户对象保持区分大小写以用于显示目的,但是为了独特的目的而要小写。我的第一个想法是在架构中添加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如何对传入数据进行小写验证/更改。

如果我的问题不明确,请告诉我,为了清楚起见,我可以尝试更新。

2 个答案:

答案 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 }

https://mongoosejs.com/docs/4.x/docs/schematypes.html