Próbuję zaktualizować dokument w MongoDB, znajdując go w ObjectId. Przepływ pracy jest następujący (dotyczy bloga).Wyszukiwanie dokumentu MongoDB za pomocą ObjectId z Mongoose
- Utwórz nowy wpis w MongoDB, przekazując tytuł i treść. ObjectId jest tworzone automatycznie.
- Przejdź do edycji postu. Używa ObjectId z adresu URL, aby pobrać go z bazy danych i wyświetlić go w tym samym nowym formularzu, tylko z wcześniejszymi wartościami.
- Po kliknięciu przycisku Wyślij chcę znaleźć dokument w ObjectId i zaktualizować wartości w bazie danych do wartości w formularzu wpisu.
Krok 1 & 2 działa dobrze, ale krok 3 wydaje się nie działać. Przekierowuje na stronę, której potrzebuję. Ale baza danych nie została zaktualizowana. Jest to ta sama wartość, co wcześniej.
Oto odpowiedni kod dla części Aktualizacja postu:
app.js
app.post "/office/post/:id/update", ensureAuthenticated, routes.updatePost
szlaki/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"));
}
Używam Express i Mangusta.
Jest to również model poczta czy to pomaga:
(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);
A oto kod dla widoku edycji blogu:
app.js
app.get("/office/post/:id/edit", ensureAuthenticated, routes.editPost);
tras /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
});
});
}
To wszystko, dzięki! Chociaż dla innych, musiałem również zmienić sposób, w jaki odwoływałem się do _id. Oto ostatni kod dla updatePost: 'updatePost: function (req, res) { return Post.update ({ " _id ": req.params.id }, req.body.post, funkcja (err, post) { if (err) { console.log ("Błąd"); } powróć res.przekierowanie ("/ office/edit/posts"); }); } ' –