2

危险!我是 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 出现在上面。

在保存模型之前,如何填充(这可能是错误的术语)我的模型?

4

0 回答 0