Mongoose CastError: Cast to embedded failed for value

问题描述

最近使用mongoose遇到个错误CastError: Cast to embedded failed for value,搜了一下发现文章很少,于是写篇文章记录一下。

原来代码:

let mongoose = require('./mongodb');
let Schema = mongoose.Schema;
var ArticleSchema = new Schema({
    author: { type: String, default: 'admin' }, //作者
    time: { type: Date, default: Date.now }, //时间 
    content: { type: String, required: true }, //内容
    img: { type: String, default: 'logo.svg' },
    zan: { type: Number, default: 0 },
    cai: { type: Number, default: 0 },
    read: { type: Number, default: 0 },
    category: [String],
    ///////////////////
    // comment这里是重点
    ///////////////////
    comment: [{
        name: { type: String, default: '路人' },
        time: { type: Date, default: Date.now },
        content: { type: String, required: true }
    }]
});
module.exports = mongoose.model('Article', ArticleSchema, 'article');

我打算插入一条评论:

router.post('/pushCommentById', async (ctx) => {
    const id = ctx.request.body.id

    // 新建评论
    const comment = {
        name: ctx.request.body.name || '路人',
        time: Date.now
        content: ctx.request.body.content
    }

    // 插入评论
    const data = await Article.findByIdAndUpdate({ '_id': id }, { $push: { comment } }, {                 new: true });
    console.log(data)
    ctx.body = data;
})

然后就报错:

解决方式

将Date.now去除掉

const comment = {
        name: ctx.request.body.name || '路人',
        // time: Date.now,
        content: ctx.request.body.content
    }

原因分析

我新建的comment的格式与原来Schema里声明的不一样,Scema里的是Date对象,我传入的Date.now是一个函数,类型不同。

Scema里的Date.now是在没有值的情况下执行该函数,并非值是函数。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章