2012-10-30 17 views
20

का हिस्सा बनने के लिए नहीं मिल सकता है। मैं एक वर्चुअल घोषित कर रहा हूं जिसे मैं अपनी स्कीमा के प्रश्नों के परिणामों के भाग के रूप में दिखाना चाहता हूं, लेकिन यह तब दिखाई नहीं दे रहा है जब मैं console.log पर करता हूं उदेश्य। यहां स्कीमा है:मोंगोस आभासी परिणाम ऑब्जेक्ट

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

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

क्या यह किसी भी प्रश्न के परिणामों की संपत्ति के रूप में आभासी सेट नहीं करना चाहिए? यह नहीं करता है, न ही schema.set ("toObject", {वर्चुअल: सत्य}) करता है। क्या मैं इसे ठीक से कर रहा हूं?

+0

मैं संस्करण 3.3.1 का उपयोग कर रहा हूं। –

+0

myModel.find ({})। Exec (function (err, results) { console.log (JSON.stringify (परिणाम [0])); } –

+1

@ माइकपटेरस - क्या आप इसे काम कर रहे हैं? तो, कैसे? मुझे बिल्कुल वही समस्या है। – Oddman

उत्तर

58

क्योंकि आप अपने console.log कॉल में JSON.stringify का उपयोग कर रहे हैं, जो मॉडल उदाहरण पर toJSON विधि को आमंत्रित करता है, toObject नहीं।

तो या तो अपने कॉल में JSON.stringify छोड़ देते हैं:

console.log(results[0]); 

या आप वर्तमान में toObject विकल्प स्थापित कर रहे हैं की तरह स्कीमा पर toJSON विकल्प सेट।

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

मुझे कम से कम 2 दिनों के लिए यह समस्या है - और वर्चुअल सक्षम के साथ ऑब्जेक्ट/toJSON का कोई संयोजन काम नहीं किया है। मुझे आउटपुट करने के लिए वर्चुअल नहीं मिल सकते हैं। ड्राइविंग मुझे बिल्कुल लड़ाकू! – Oddman

+3

मैंने इसे ठीक करने के लिए समाप्त कर दिया - मुझे पता नहीं था कि मुझे इन दोनों गुणों को परिभाषित करने की आवश्यकता है। मुझे पागल कर दें। lol – Oddman

+2

महान प्रश्न; अच्छा जवाब। इसे सही के रूप में स्वीकार किया जाना चाहिए। – Nate

1

मैं यहां कुछ वास्तव में मूर्खतापूर्ण काम कर रहा हूं। मैं Doc.find का उपयोग Doc.findOne के बजाय कर रहा था और इसलिए मैं दस्तावेज़ के बजाय दस्तावेज़ सरणी पर वर्चुअल तक पहुंचने का प्रयास कर रहा था।

संबंधित मुद्दे