2012-10-30 15 views
20

b我正在聲明一個虛擬,該虛擬將作爲其模式查詢結果的一部分出現,但是當我在console.log上執行時沒有顯示它物體。這是模式:無法將Mongoose虛擬成爲結果對象的一部分

var schema = new mongoose.Schema(
{ 
    Name: { type: String } 
}, 
{ 
    toObject: { virtuals: true } 
}); 

schema.virtual("Greet").get(function() 
{ 
    return "My name is " + this.Name; 
}); 

如果toObject沒有將虛擬設置爲任何查詢結果的屬性?它沒有,也沒有schema.set(「toObject」,{virtuals:true})。我做對了嗎?

+0

我使用的是版本3.3.1。 –

+0

myModel.find({})。exec(function(err,results) { console.log(JSON.stringify(results [0])); } –

+1

@MikePateras - 你最終得到這個工作嗎?所以,如何?我有完全相同的問題。 – Oddman

回答

58

因爲您在console.log調用中使用JSON.stringify,所以在模型實例上調用toJSON方法,而不是toObject

所以要麼省略JSON.stringify在您的來電:

console.log(results[0]); 

還是喜歡你目前設置toObject選項設置架構中的toJSON選項。

... 
{ 
    toObject: { virtuals: true }, 
    toJSON: { virtuals: true } 
}); 
+0

我有至少2天的相同的問題 - 並沒有啓用虛擬的toObject/toJSON的組合已經工作,我只是無法得到虛擬輸出。我絕對batty! – Oddman

+3

我最終修復它 - 我不知道我需要這兩個屬性被定義。驅動我堅果。大聲笑 – Oddman

+2

偉大的問題;很好的回答。這應該被接受爲正確。 – Nate

1

我最終在這裏做了一件非常愚蠢的事情。我正在使用Doc.find而不是Doc.findOne,所以我試圖訪問文檔數組上的虛擬而不是文檔本身。

相關問題