Sto cercando di aggiornare un documento in MongoDB trovandolo dall'ObiOd. Il flusso di lavoro è il seguente (questo è per un blog).Trovare un documento MongoDB da ObjectId con Mongoose
- Creare un nuovo post in MongoDB passando un titolo e un corpo. ObjectId viene creato automaticamente.
- Vai a modificare il post. Usa ObjectId dall'URL per afferrarlo dal database e visualizzarlo nello stesso nuovo modulo, solo con i valori preesistenti.
- Quando si fa clic sul pulsante di invio, desidero trovare il documento da ObjectId e aggiornare i valori nel database con quelli nel modulo di post.
Passaggio 1 & 2 funzionano bene, ma il passaggio 3 non sembra funzionare. Reindirizza alla pagina di cui ho bisogno. Ma il database non è stato aggiornato. È lo stesso valore di prima.
Ecco il relativo codice per la parte di aggiornamento POST:
app.js
app.post "/office/post/:id/update", ensureAuthenticated, routes.updatePost
rotte/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"));
}
sto usando Express e Mangusta.
Questo è anche il modello di posta se questo aiuta:
(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);
Ed ecco il codice per la vista edit post sul blog:
app.js
app.get("/office/post/:id/edit", ensureAuthenticated, routes.editPost);
percorsi /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
});
});
}
Ecco, grazie! Anche se per gli altri, ho dovuto anche cambiare il modo in cui mi riferivo al _id. Ecco il codice finale per updatePost: 'updatePost: function (req, res) { return Post.update ({ " _id ": req.params.id }, req.body.post, function (err, post) { if (err) { console.log ("Errore"); } ritorno ris.reindirizzare ("/ ufficio/modificare/messaggi"); }); } ' –