8
MongoDBの文書をObjectIdで検索して更新しようとしています。ワークフローは以下の通りです(これはブログ用です)。MongooseでObjectIdでMongoDB文書を検索
- タイトルと本文を渡してMongoDBに新しい投稿を作成します。 ObjectIdが自動的に作成されます。
- 投稿を編集してください。 URLからのObjectIdを使用して、データベースから取得し、既存の値と同じ新しい投稿フォームに表示します。
- 送信ボタンをクリックすると、ObjectIdでドキュメントを探し、ポストフォームの値でデータベースの値を更新します。
手順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"));
}
私はExpressを使用していますし、マングース。
ことができます場合、これがまた、ポストモデルである:
(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
});
});
}
これは、ありがとう!他の人にとっては、私が_idを参照していた方法を変更しなければならなかった。 updatePostの最終コードは次のとおりです。updatePost:function(req、res){ return post.update({ "_id":req.params.id }、req.body.post、function(err、post) { if(err){ console.log( "Error"); } リターンres。リダイレクト( "/ office/edit/posts"); }); } ' –