Das finden einer MongoDB-Dokuments durch die ObjectId mit Mungo
Ich bin versucht, zu aktualisieren ein Dokument in MongoDB zu finden, indem Sie durch die ObjectId. Der Arbeitsablauf ist wie folgt (dies ist für einen blog).
- Einen neuen Beitrag erstellen in MongoDB, indem Sie übergeben einen Titel und Körper. Die ObjectId wird automatisch erstellt.
- Gehen Sie zum Bearbeiten der post. Es verwendet die ObjectId aus der URL zu greifen, es aus der Datenbank und zeigt es in der gleichen, neuen post-Formular, einfach mit der bereits vorhandenen Werte.
- Wenn der submit-button geklickt wird, will ich finden das Dokument von der ObjectId und aktualisieren Sie die Werte in der Datenbank mit denen in der post-form.
Schritt 1 & 2 einwandfrei funktionieren, aber Schritt 3 scheint nicht zu funktionieren. Es leitet zu der Seite, ich brauche es. Aber die Datenbank wurde nicht aktualisiert. Es ist der gleiche Wert wie es vorher war.
Hier ist der entsprechende code für den update-post Teil:
app.js
app.post "/office/post/:id/update", ensureAuthenticated, routes.updatePost
routes/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"));
}
Ich bin mit Express und Mongoose.
Dies ist auch der post-Modell falls das hilft:
(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);
Und hier ist der code für das Bearbeiten von blog-Beitrag-Ansicht:
app.js
app.get("/office/post/:id/edit", ensureAuthenticated, routes.editPost);
routes/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
});
});
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, wie Sie Sie nennen
update
Das Letzte argument wird tatsächlich leiten Sie die Seite, in der Erwägung, dass
update
erwartet eine Funktion, die aufgerufen werden, wenn das update abgeschlossen ist,Sollten Sie pass in
Dass wir nur umleiten, wenn sich das Modell erfolgreich aktualisiert
updatePost: function(req, res) { return Post.update({ "_id": req.params.id }, req.body.post, function(err, post) { if (err) { console.log("Error"); } return res.redirect("/office/edit/posts"); }); }