美文网首页前端成长路
MongoDB 存储数据时报错

MongoDB 存储数据时报错

作者: ninja梅梅 | 来源:发表于2017-03-28 16:38 被阅读131次

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

    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 存储数据时报错

        本文链接:https://www.haomeiwen.com/subject/qegjottx.html