哈希被推到猫鼬模型上作为'[对象对象]”;

Hashes being pushed onto mongoose model as '[object Object]"

本文关键字:对象 模型 哈希      更新时间:2023-09-26

我正试图将一些东西推到Mongoose模型上。模型看起来像这样。

var ScheduleSchema = new mongoose.Schema({
    hours: Number,
    items: [{number: Number, minutes: Number, details: {description: String}, type: String}],
    userId: Number
});

//later
ScheduleSchema.methods.createNew = function(hours, tasks, breathers) {
    var schedule = makeSchedule(hours, tasks, breathers);
    console.log(schedule);
    this.items = schedule;
    console.log(this.items);
}

我认为这对我的问题来说已经足够了,但如果需要,我可以提供更多的代码。本质上,我有一个创建时间表的方法,然后我想将时间表分配给对象的"items"属性。我必须承认,我还在学习猫鼬,所以它可能是那里的一个问题。

无论如何,我知道我的makeSchedule函数正在工作,因为我将其视为第一条控制台消息的输出。

[{ number: 1,
   minutes: 30,
   details: {description: 'Task A'},
   type: 'task'},
 { number: 2,
   minutes: 45,
   details: {description: 'Task B'},
   type: 'task'},
 etc...
 ]

然而,当我的第二条日志语句this.items的控制台输出打印出来时,我看不到相同的结构。相反,我看到

["[object Object]", "[object Object]", "[object Object]", etc...]

为什么我不能直接将时间表变量分配给this.items?我相信我以前甚至可以做到,但我对日程代码做了一些更改,现在我做不到了。

这会让我相信错误在我的计划代码中,但正如你所看到的,它根据控制台输出创建项目列表很好。有人能看到一个非常明显的、可能与猫鼬有关的错误吗?我在新秀时期可能错过了这个错误?

我的猜测是,您最近在items中的嵌入对象中添加了type字段,这使得Mongoose现在认为items包含一个字符串数组,而不是像您那样的对象数组。

要解决此问题,请使用一个对象在您的模式中定义type的类型,如下所示:

var ScheduleSchema = new mongoose.Schema({
    hours: Number,
    items: [{
        number: Number, 
        minutes: Number, 
        details: {description: String}, 
        type: {type: String}
    }],
    userId: Number
});