一、mongoose 预定义模式修饰符
mongoose 提供的预定义模式修饰符,可以对我们增加的数据进行一些格式化。mongoose提供了lowercase
、uppercase
、trim
预定义模式修饰符,其中trim
能够对字段数据做两端去空格的格式化:
/*定义带trim修饰符的Schema*/
const NewsSchema = mongoose.Schema({
title: {
type:String,
trim: true
},
author: String,
pic:String,
content: String,
status: {
type: Number,
default: 1
}
});
const News = mongoose.model('News', NewsSchema, 'news');
module.exports = News;
const News = require('./myDatabase/news');
/*添加数据时,将title字段的数据两端加一些空格*/
const news = new News({
title:' 最新新闻007 ',
author:'joyitsai',
pic:'07.png',
content:'新闻内容007'
});
news.save((err, docs)=>{
if(err){
console.log('添加数据出错');
return;
}
console.log(docs);
});
添加数据成功后,查看发现数据如下:
{ "_id" : ObjectId("5cf72b415b4e487a34c85cb4"), "status" : 1, "title" : "最新新闻007", "author" :
"joyitsai", "pic" : "07.png", "content" : "新闻内容007", "__v" : 0 }
你会发现,刚刚添加的数据中title
字段数据两端的空格被格式化去掉了,就是trim
的作用。
二、Mongoose Getters 与Setters 自定义修饰符
除了mongoose 内置的修饰符以外,我们还可以通过set(建议使用)
修饰符在增加数据的时候对数据进行格式化。也可以通过get(不建议使用)
在实例获取数据的时候对数据进行格式化。
2.1 Setters
set(用户添加数据){ return 真正添加到数据库的数据}
来自定义修饰符,在set
内部对用户添加的数据进行格式化操作,最终返回格式化后的数据作为真正存入数据库的数据:
const NewsSchema = mongoose.Schema({
title: {
type:String,
trim: true
},
author: String,
/*
url为空,则返回空的url;
url前面没有`http://`或`https:// `,则在前面拼接上`http://`
返回带有`http://`或`https://`的url,作为存入数据库的数据
*/
redirect: {
type: String,
set(url){
if(!url) return url;
if(url.indexOf('http://')!=0 && url.indexOf('https://')!=0){
url = 'http://' + url;
}
return url;
}
}
});
const News = mongoose.model('News', NewsSchema, 'news');
module.exports = News;
添加数据时,向redirect
字段添加一个www.baidu.com
,然后查看存入数据库的数据是否是http://www.baidu.com
,如果是,说明set
自定义修饰符有效了:
const News = require('./myDatabase/news');
const news = new News({
title:' 最新新闻007 ',
author: 'joyitsai',
redirect: 'www.baidu.com'
});
news.save((err, docs)=>{
if(err){
console.log('添加数据出错');
return;
}
console.log(docs);
});
查看一下数据:
{ "_id" : ObjectId("5cf731f8d8bda03afc8367b7"), "title" : "最新新闻007", "author" : "joyitsai",
"redirect" : "http://www.baidu.com", "__v" : 0 }
set
自定义修饰符有效了。
2.2 Getters
get
将用户添加的数据格式化后,并没有存入数据库;仅仅是用户在实例化模型时,这个实例中的数据被做了格式化操作,在常规应用中意义不大。
网友评论