MongoDB基礎(chǔ)五:Mongoose 預(yù)定義模式修飾符、Setters與Getters自定義修飾符

一、mongoose 預(yù)定義模式修飾符

mongoose 提供的預(yù)定義模式修飾符,可以對我們增加的數(shù)據(jù)進(jìn)行一些格式化。mongoose提供了lowercase、uppercase 、trim預(yù)定義模式修飾符,其中trim能夠?qū)ψ侄螖?shù)據(jù)做兩端去空格的格式化:

/*定義帶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');
/*添加數(shù)據(jù)時,將title字段的數(shù)據(jù)兩端加一些空格*/
const news = new News({
    title:'     最新新聞007     ',
    author:'joyitsai',
    pic:'07.png',
    content:'新聞內(nèi)容007'
});

news.save((err, docs)=>{
    if(err){
        console.log('添加數(shù)據(jù)出錯');
        return;
    }
    console.log(docs);
});

添加數(shù)據(jù)成功后,查看發(fā)現(xiàn)數(shù)據(jù)如下:

{ "_id" : ObjectId("5cf72b415b4e487a34c85cb4"), "status" : 1, "title" : "最新新聞007", "author" : 
"joyitsai", "pic" : "07.png", "content" : "新聞內(nèi)容007", "__v" : 0 }

你會發(fā)現(xiàn),剛剛添加的數(shù)據(jù)中title字段數(shù)據(jù)兩端的空格被格式化去掉了,就是trim的作用。

二、Mongoose Getters 與Setters 自定義修飾符

除了mongoose 內(nèi)置的修飾符以外,我們還可以通過set(建議使用) 修飾符在增加數(shù)據(jù)的時候?qū)?shù)據(jù)進(jìn)行格式化。也可以通過get(不建議使用)在實(shí)例獲取數(shù)據(jù)的時候?qū)?shù)據(jù)進(jìn)行格式化。

2.1 Setters

set(用戶添加數(shù)據(jù)){ return 真正添加到數(shù)據(jù)庫的數(shù)據(jù)}來自定義修飾符,在set內(nèi)部對用戶添加的數(shù)據(jù)進(jìn)行格式化操作,最終返回格式化后的數(shù)據(jù)作為真正存入數(shù)據(jù)庫的數(shù)據(jù):

const NewsSchema = mongoose.Schema({
    title: {
        type:String,
        trim: true
    },
    author: String,
    /*
      url為空,則返回空的url;
      url前面沒有`http://`或`https:// `,則在前面拼接上`http://`
      返回帶有`http://`或`https://`的url,作為存入數(shù)據(jù)庫的數(shù)據(jù)
    */
    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;

添加數(shù)據(jù)時,向redirect字段添加一個www.baidu.com,然后查看存入數(shù)據(jù)庫的數(shù)據(jù)是否是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('添加數(shù)據(jù)出錯');
        return;
    }
    console.log(docs);
});

查看一下數(shù)據(jù):

{ "_id" : ObjectId("5cf731f8d8bda03afc8367b7"), "title" : "最新新聞007", "author" : "joyitsai", 
"redirect" : "http://www.baidu.com", "__v" : 0 }

set自定義修飾符有效了。

2.2 Getters

get將用戶添加的數(shù)據(jù)格式化后,并沒有存入數(shù)據(jù)庫;僅僅是用戶在實(shí)例化模型時,這個實(shí)例中的數(shù)據(jù)被做了格式化操作,在常規(guī)應(yīng)用中意義不大。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容