8
我試圖通過ObjectId來查找MongoDB中的文檔。工作流程如下(這是一個博客)。通過ObjectId和Mongoose查找MongoDB文檔
- 通過傳遞標題和正文在MongoDB中創建一個新帖子。 ObjectId是自動創建的。
- 前往編輯帖子。它使用URL中的ObjectId從數據庫中抓取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) {err} {console.log(「Error」); } return res。重定向( 「/辦公室/編輯/帖」); }); }' – 2013-02-21 13:34:14