2016-11-25 26 views
0

我正面臨着這個奇怪的問題,它給了我一個特定模式的ValidationError。我不太確定這次事故的原因,因爲對象的類型對我來說似乎很完美。驗證錯誤Mongodb

// works fine but the Data in ObservationsObject is LOST 

var ObservationsObject = Observations.ObservationsModel(timeTable.learningCenter.observations); 
var LearningCenterObject = LearningCenter.LearningCenterModel(timeTable.learningCenter); 
LearningCenterObject.observations = ObservationsObject; 



// GIVES VALID ERROR UPON LEARNINGCENTER.SAVE() 

var LearningCenterObject = LearningCenter.LearningCenterModel(timeTable.learningCenter); 
for (var i = 0; i < timeTable.learningCenter.observations.length; i++) { 
    var ObservationsObject = Observations.ObservationsModel(timeTable.learningCenter.observations[i]); 
    LearningCenterObject.observations.push(ObservationsObject); 
} 

可以節省代碼:

LearningCenterObject.save(function (err, learningCenterSavedObject) { 
     if (err) { 
      console.error("TimeTableController->LearningCenterObject->save()", err); 
      return; 
     } 
     console.log("TimeTableController->LearningCenterObject->save() SUCCESS"); 

     ObservationsObject.save(function (err, observationSavedObject) { 
      if (err) { 
       console.error("TimeTableController->LearningCenterObject->Observations->save()", err); 
       return; 
      } 

      console.log("TimeTableController->LearningCenterObject->Observations->save() SUCCESS"); 
     }); 
    }); 

架構:

learningCenterSchema = new mongoose.Schema({ 
     name : String, 
     observations: [{type: Schema.Types.ObjectId, ref: "observations_model"}] 
    }); 


observationsSchema = new mongoose.Schema({ 
     obsNum : String, 
     data: {ageGroup : String, category: String, description: String, tips: String} 
    }); 

錯誤:

TimeTableController->LearningCenterObject->save() { [ValidationError: learning_center_model validation failed] 
    message: 'learning_center_model validation failed', 
    name: 'ValidationError', 
    errors: 
    { observations: 
     { [CastError: Cast to Array failed for value "[object Object]" at path "observations"] 
     message: 'Cast to Array failed for value "[object Object]" at path "observations"', 
     name: 'CastError', 
     kind: 'Array', 
     value: [Object], 
     path: 'observations', 
     reason: [Object] } } } 

樣品JSON:

"learningCenter": { 
    "name": "asdf", 
    "observations": [ 
     { 
     "obsNum": "1.1111", 
     "data": { 
      "ageGroup": "sadf", 
      "category": "df", 
      "description": "adf", 
      "tips": "asdf" 
     } 
     } 
    ] 
} 

回答

1

誤差是有點兒隱蔽和模糊是新手。通俗地說,錯誤是

「您正在將一個對象作爲一個OBJECT OBJECT的對象分配給一個只能接受包含OBJECT對象的OBJECT的對象」。

儘管我在數組中推入的對象是{object,object}(不知道爲什麼Mongoose會說它是[Object object],可能是一個更熟練的人可以幫我解決這個問題) ARRAY OF OBJECT ID,貓鼬驗證失敗。

爲了解決這個問題,我創建了一個數組。在該數組中推入ObservationModel對象ID並將該數組分配給LearningCenter.observations。

var myArray = new Array(); 

var LearningCenterObject = LearningCenter.LearningCenterModel(timeTable.learningCenter); 
for (var i = 0; i < timeTable.learningCenter.observations.length; i++) { 
    var ObservationsObject = Observations.ObservationsModel(timeTable.learningCenter.observations[i]); 
    myArray.push(ObservationsObject); 
} 

LearningCenterObject.observations = myArray; 
0

當試圖更新數組中沒有任何內容的模型時,我遇到了同樣的問題。如果數組中沒有任何內容,我只是將它初始化爲一個空數組。

if (contact.group && contact.group.length > 0){ 
     for (let groupContact of contact.group) { 
      groupContact = groupContact._id; 
     } 
    } else { 
     contact.group = []; 
    } 

contact.save ...