2012-11-25 56 views

回答

2

將該字段定義爲virtual getter,而不是傳統字段。

例如,假設您想讓您的收藏只讀當通過貓鼬訪問的pop領域:

var schema = new Schema({ 
    city: String, 
    state: String 
}); 

schema.virtual('pop').get(function() { 
    return this._doc.pop; 
}); 

通過訪問你的模型實例的私有_doc成員很可能,這可能在突破未來,但是當我剛剛測試它時,這個工作很好。

+0

是如何工作的呢?虛擬不會持續下去,對吧? – sidgate

+1

@sidgate這是一箇舊的答案和一些黑客暴露未在模式中定義但出現在底層文檔中的字段。所以你說得對,虛擬不會被持久化,但是由於'pop'字段已經存在,所以它可以工作,因爲原始文檔可以通過(未記錄的)'_doc'字段獲得。 – JohnnyHK

11

,如果你想設置永遠不能更改的默認值的選擇:

var schema = new Schema({ 
    securedField: { 
    type: String, 
    default: 'Forever', 
    set: function (val) { return this.securedField; } 
});