MongoDB 存储数据时报错

以下是开发个人博客的评论功能时的主要代码:
-评论的数据模型代码

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主键。
接下来就是见证奇迹的时刻了。
输入评论,发表。数据库里保存成功。

你可能感兴趣的:(MongoDB 存储数据时报错)