2013-02-20 65 views
8

के साथ ऑब्जेक्टआईडी द्वारा एक मोंगोडीबी दस्तावेज़ ढूँढना मैं ऑब्जेक्टआईडी द्वारा इसे ढूंढकर मोंगोडीबी में एक दस्तावेज़ को अपडेट करने का प्रयास कर रहा हूं। कार्य प्रवाह निम्नानुसार है (यह एक ब्लॉग के लिए है)।मोंगोस

  1. शीर्षक और शरीर को पार करके मोंगो डीबी में एक नई पोस्ट बनाएं। ऑब्जेक्टआईडी स्वचालित रूप से बनाया गया है।
  2. पोस्ट को संपादित करने के लिए जाएं। यह URL से ऑब्जेक्टआईडी का उपयोग डेटाबेस से इसे पकड़ने के लिए करता है और इसे उसी नए पोस्ट फॉर्म में प्रदर्शित करता है, केवल पूर्ववर्ती मानों के साथ।
  3. जब सबमिट बटन क्लिक किया गया है, तो मैं ऑब्जेक्ट आईडी द्वारा दस्तावेज़ ढूंढना चाहता हूं और पोस्ट फॉर्म में डेटाबेस में मानों को अपडेट करना चाहता हूं।

चरण 1 & 2 ठीक काम करता है, लेकिन चरण 3 काम नहीं कर रहा है। यह उस पृष्ठ पर रीडायरेक्ट करता है जिसकी मुझे आवश्यकता है। लेकिन डेटाबेस अद्यतन नहीं किया गया है। यह वही मूल्य है जैसा कि पहले था।

app.js

app.post "/office/post/:id/update", ensureAuthenticated, routes.updatePost 

मार्गों/index.js

mongoose = require 'mongoose' 
ObjectId = mongoose.Types.ObjectId 

Post = require '../models/Post' 

... 

updatePost: function(req, res) { 
    var o_id, the_id; 

    the_id = req.params.id; 
    console.log(the_id); // 510e05114e2fd6ce61000001 

    o_id = ObjectId.fromString(the_id); 
    console.log(o_id); // 510e05114e2fd6ce61000001 

    return Post.update({ 
    "_id": ObjectId.fromString(the_id) 
    }, { 
    "title": "CHANGE" 
    }, res.redirect("/office/edit/posts")); 
} 

मैं एक्सप्रेस और उपयोग कर रहा हूँ:

यहाँ अद्यतन पोस्ट हिस्से के लिए प्रासंगिक कोड है नेवला।

यह भी पद मॉडल है कि अगर मदद करता है:

(function() { 
    var Post, Schema, mongoose; 

    mongoose = require('mongoose'); 

    Schema = mongoose.Schema; 

    Post = new Schema({ 
    title: String, 
    subhead: String, 
    body: String, 
    publish_date: { 
     type: Date, 
     "default": Date.now 
    }, 
    mod_date: { 
     type: Date, 
     "default": Date.now 
    } 
    }); 

    module.exports = mongoose.model('Post', Post); 

}).call(this); 

और यहाँ संपादित करें ब्लॉग पोस्ट देखने के लिए कोड है:

app.js

app.get("/office/post/:id/edit", ensureAuthenticated, routes.editPost); 

मार्गों /index.js

editPost: function(req, res) { 
    return Post.findById(req.params.id, function(err, post) { 
    return res.render('edit-post', { 
     post: post, 
     title: post.title 
    }); 
    }); 
} 

उत्तर

3

बात नहीं, आप कैसे कहते हैं update

return Post.update({ 
    "_id": ObjectId.fromString(the_id) 
}, { 
    "title": "CHANGE" 
}, res.redirect("/office/edit/posts")); 

अंतिम तर्क वास्तव में पृष्ठ पर रीडायरेक्ट करेगा, जबकि update उम्मीद एक समारोह के नाम से जाना अपडेट पूरा होने पर

आप

में पास करना चाहिए
return Post.update({ 
    "_id": ObjectId.fromString(the_id) 
}, { 
    "title": "CHANGE" 
}, function(err, model) { 
    if (err) // handleerr 

    res.redirect("/office/edit/posts")); 
}); 

इस तरह, हम मॉडल को सफलतापूर्वक अपडेट होने के बाद ही रीडायरेक्ट करते हैं

+0

वह था, धन्यवाद! हालांकि दूसरों के लिए, मुझे भी जिस तरह से मैं _id का संदर्भ दे रहा था उसे बदलना पड़ा। अपडेटपोस्ट के लिए अंतिम कोड यहां दिया गया है: 'अपडेटपोस्ट: फ़ंक्शन (रिक, आरएस) { वापसी पोस्ट.अपडेट ({ " _id ": req.params.id }, req.body.post, फ़ंक्शन (त्रुटि, पोस्ट) { यदि (त्रुटि) { console.log ("त्रुटि"); } वापसी res।("/ कार्यालय/संपादित करें/पदों") रीडायरेक्ट; }); } ' –