以下是开发个人博客的评论功能时的主要代码:
-评论的数据模型代码
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.Types.ObjectId;
var CommentSchema = new Schema({
blog:{type: ObjectId, ref: 'Blog'},
from:{type: ObjectId, ref: 'User'},
to:{type: ObjectId, ref: 'User'},
content: String,
meta:{
createAt: {
type: Date,
default: Date.now()
},
updateAt:{
type: Date,
default: Date.now()
}
}
});
-nodeJs存储页面post过来的信息代码
comment.save(function(err,blog){
if(err){
console.log(err);
}
res.redirect('/blog/'+ blogId);
});
当存入第一条数据时,正常。存入第二条时打印出mongo报的如下错误:
{ MongoError: E11000 duplicate key error collection: myblog.comm
ents index: name_1 dup key: { : null }...}
报错后浏览了很多网站均无果,此时我的内心是崩溃的。在放弃的边缘苦苦挣扎着,或许是因为坚持得到了回报。终于在一个国外?(反正全是英文,但域名为.com)的网站上找到了错误的原因以及解决的方法。在这,我想向大家推荐一个不错的网站http://stackoverflow.com/ 我就是在这里得到了解救。
报错的原因:
从报错信息来看是说保存到comments文档中的主键name_1值为null.虽然很显然在以上代码里我并没有将name设置为主键。
解决方法
此时打开mongo
控制台,输入db.comments.getIndexes()
后,返回了一个包含4个对象的数组,说明在comments这个文档中我的主键有4个,再使用db.comments.dropIndex({"name":1})
,语句删除name
主键,依次删除其他两个主键,只留_id
主键。
接下来就是见证奇迹的时刻了。
输入评论,发表。数据库里保存成功。