Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证错误Mongodb_Javascript_Mongodb_Validation_Typescript_Mongoose - Fatal编程技术网

Javascript 验证错误Mongodb

Javascript 验证错误Mongodb,javascript,mongodb,validation,typescript,mongoose,Javascript,Mongodb,Validation,Typescript,Mongoose,我面临着一个奇怪的问题,它给了我一个特定模式的ValidationError。我不确定坠机的原因,因为物体的类型对我来说似乎很好 // works fine but the Data in ObservationsObject is LOST var ObservationsObject = Observations.ObservationsModel(timeTable.learningCenter.observations); var LearningCenterObject = Lear

我面临着一个奇怪的问题,它给了我一个特定模式的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] } } }
"learningCenter": {
    "name": "asdf",
    "observations": [
      {
        "obsNum": "1.1111",
        "data": {
          "ageGroup": "sadf",
          "category": "df",
          "description": "adf",
          "tips": "asdf"
        }
      }
    ]
}
错误:

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] } } }
"learningCenter": {
    "name": "asdf",
    "observations": [
      {
        "obsNum": "1.1111",
        "data": {
          "ageGroup": "sadf",
          "category": "df",
          "description": "adf",
          "tips": "asdf"
        }
      }
    ]
}
示例JSON:

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] } } }
"learningCenter": {
    "name": "asdf",
    "observations": [
      {
        "obsNum": "1.1111",
        "data": {
          "ageGroup": "sadf",
          "category": "df",
          "description": "adf",
          "tips": "asdf"
        }
      }
    ]
}

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

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

虽然我在数组中推送的对象是{object,object}(不确定为什么Mongoose说它是[object object],可能是更熟练的人可以帮我弄清楚这一点)一个对象,它是一个对象ID数组,但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;
var myArray=new Array();
var LearningCenterObject=LearningCenter.LearningCenterModel(timeline.LearningCenter);
对于(变量i=0;i
我在尝试更新阵列中没有任何内容的模型时遇到了相同的问题。如果数组中没有任何内容,我只是将其初始化为空数组

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

contact.save…

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

我删除了
默认值:[]
并修复了错误