2015-06-16 16 views
6

में संपत्ति जोड़ने में असमर्थ मैं सफल अपडेट पर प्रतिक्रिया में स्थिति जोड़ने की कोशिश कर रहा हूं लेकिन मैं फॉर्म की जेसन ऑब्जेक्ट में स्टेटस प्रॉपर्टी जोड़ने में सक्षम नहीं हूं। यहाँ मेरी कोडजेसन ऑब्जेक्ट

apiRouter.post('/forms/update', function(req, res){ 

    if(req.body.id !== 'undefined' && req.body.id){ 

     var condition = {'_id':req.body.id}; 

     Form.findOneAndUpdate(condition, req.body, {upsert:true}, function(err, form){ 

      if (err) return res.send(500, { error: err }); 

      var objForm = form; 

      objForm.status = "saved successfully"; 

      return res.send(objForm); 

     }); 

    }else{ 
     res.send("Requires form id"); 
    } 

}); 

है और यहाँ प्रतिक्रिया है कि मैं मिलता है, नोटिस स्थिति

{ 
    "_id": "5580ab2045d6866f0e95da5f", 
    "test": "myname", 
    "data": "{\"name\":3321112,\"sdfsd\"344}", 
    "__v": 0, 
    "id": "5580ab2045d6866f0e95da5f" 
} 

याद आ रही है मुझे यकीन है कि मैं क्या याद आ रही है नहीं कर रहा हूँ।

उत्तर

8

.toObject() के रूप का प्रयास करें:

Form.findOneAndUpdate(condition, req.body, {upsert:true}, function(err, form){ 

    if (err) return res.send(500, { error: err }); 

    var objForm = form.toObject(); 

    objForm.status = "saved successfully"; 

    return res.send(objForm); 

}); 
+0

समझने के लिए मूल्यवान है (जैसा कि @ जोस मातो के जवाब में है) कि mongoose क्वेरी परिणाम एक्स्टेंसिबल नहीं हैं! – Sebastian

0

res.send(objForm) से res.send(JSON.stringify(objForm)) बदलने का प्रयास करें। मेरा संदेह यह है कि मोंगोस मॉडल के पास एक कस्टम टू जेसन फ़ंक्शन है ताकि जब आप इसे वापस कर रहे हों, तो यह किसी भी तरह से प्रतिक्रिया को बदल रहा है।

उम्मीद है कि उपर्युक्त मदद करता है।

+0

नहीं मैंने भी कोशिश की थी। यह ऑब्जेक्ट को स्ट्रिंग में बदल देता है और संपत्ति को नहीं जोड़ता है :( – Autolycus

+0

एक आलसी हैक फिर 'var objForm = JSON.parse (JSON.stringify (फॉर्म)); 'या ऑब्जेक्ट.क्रेट ऊपर पोस्ट के रूप में जाना होगा। कि आप एक प्रतिलिपि पर काम कर रहे हैं। – deanmcpherson

6

नेवला क्वेरी परिणाम ताकि आप अधिक गुण नहीं जोड़ सकते, एक्स्टेंसिबल नहीं हैं (वस्तु जमे हुए या सील कर रहे हैं)। कि बचने के लिए आप ऑब्जेक्ट की प्रति बना सकते हैं और यह हेरफेर करने के लिए की जरूरत है:

var objectForm = Object.create(form); 
objectForm.status = 'ok'; 

अद्यतन: मेरा जवाब पुराना है और ठीक काम किया, लेकिन मैं एक ही का उपयोग कर ES6 वाक्य रचना डाल देंगे

const objectForm = Object.create({}, form, { status: 'ok' });

एक और तरीका है प्रसार ऑपरेटर का उपयोग:

const objectForm = { ...form, status: 'ok' }

+0

ईएस 6 में एक और संभावना है: const objectForm = Object.assign (form, {status : 'ठीक' }); –

-1

बस एक कंटेनर बनाने।

array = {}; 
Model.findOneAndUpdate(condition, function(err, docs){ 
    array = docs; 
    array[0].someField ="Other"; 
}); 
संबंधित मुद्दे