【问题标题】:Validation Error Mongodb验证错误MongoDB
【发布时间】:2017-04-09 22:27:29
【问题描述】:

我正面临这个奇怪的问题,它给我某个模式的 ValidationError。我不太确定崩溃的原因,因为对象的类型对我来说似乎非常好。

// 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"
        }
      }
    ]
}

【问题讨论】:

    标签: javascript mongodb validation typescript mongoose


    【解决方案1】:

    对于新手来说,这个错误有点神秘和模糊。用外行的话来说,错误说

    “您正在将一个 OBJECT OBJECT 数组的对象分配给一个只能接受包含 OBJECTID 的 OBJECT 引用的 OBJECT”。

    虽然我在数组中推入的对象是 {object, object}(不知道为什么 Mongoose 说它是 [Object object],可能更精通的人可以帮助我弄清楚这一点)到一个作为 ARRAY 的对象OF OBJECT IDs,mongoose 验证失败。

    为了解决这个问题,我创建了一个数组。在该数组中推送 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;
    

    【讨论】:

      【解决方案2】:

      我在尝试更新数组中没有任何内容的模型时遇到了同样的问题。如果数组中没有任何内容,我只是将它初始化为一个空数组。

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

      联系人.保存...

      【讨论】:

        【解决方案3】:

        遇到同样的错误,并想出了解决方案。对我来说,问题是我使用default: [] 作为参考子文档,例如product: { type: productSchema, default: [] }

        我删除了default: [] 并修复了错误。

        【讨论】:

          猜你喜欢
          • 2017-11-14
          • 2016-06-21
          • 1970-01-01
          • 2020-12-20
          • 2021-05-09
          • 1970-01-01
          • 2020-07-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多