危险!我是 MEAN 堆栈的新手。我可能使用了错误的术语。我还从示例中删除并重构了很多代码,以使我的问题更清楚。
我有一个具有多个属性的架构,其中一个是混合类型。该混合类型是由另一个模式定义的子文档数组。这个另一个模式还有另一个混合类型的属性,包含另一个子文档数组,它由另一个模式定义。
var SubSubSchema = new Schema({
name: { type: String, required: true },
value: { type: Number, required: true }
});
var SubSchema = new Schema({
name: {
type: String,
trim: true,
default: '',
required: "Name is a required field."
}
values: {
type: [SubSubSchema],
required: "Value updates must contain values!"
}
}) ;
var MainSchema = new Schema({
name: {
type: String,
trim: true,
default: '',
required: "Name is a required field."
}
history: {
type: [SubSchema],
required: "Must have a history."
}
});
mongoose.model('MainStandard', MainSchema);
在我的客户端控制器中,我创建了一个 MainStandard 实例,如下所示:
mainStandard = new MainStandards({
name: $scope.name,
history: []
});
现在我想创建并插入历史对象...
// First create something that follows the SubSchema
var historyEntry = {
name: "test",
values: []
};
// Now insert the values from the view that follow the SubSubSchema
for (factor = $scope.selection.length-1;factor>=0;factor--){
// only store if selected
if ($scope.selection[factor].selected == true){
historyEntry.values.push(
{factor: $scope.selection[factor].name, value: $scope.selection[factor].value}
);
}
}
// Insert the finished historyEntry...
mainStandard.history.push(historyEntry);
// ...and save the finished mainStandard
mainStandard.$save(function(response) {
$location.path('main-standards/' + response._id);
}, function(errorResponse) {
$scope.error = errorResponse.data.message;
});
当我这样做时,服务器端请求如下所示:
{ name: 'aoeu',
history:
[ {
created: 1433430622745,
creator: '55706a4ef725840d8e8d5716',
values: **[Object]**
} ],
}
一个对象,你说?好吧,那是行不通的。所以我做了一些搜索并对自己说,“自我,你为什么不将 historyEntry 推入 mainStandard,然后将值推入 mainStandard.history.values?”
但这似乎也不起作用。我在浏览器的控制台中收到一条错误消息,提示 mainStandard.history.values 不存在。郁闷,打印出来。我看到它就在那里,在它的卷曲支撑,引用的荣耀中!嗯……但那不是一个 JavaScript 命名的数组吗?它可以解释为什么 Object 出现在上面。
在保存模型之前,如何填充(这可能是错误的术语)我的模型?