【问题标题】:mongoose - CastError: 'Cast to undefined failed for value "[object Object]" at path "trainers"猫鼬-CastError:'在路径“trainers”处为值“[object Object]”转换为未定义失败
【发布时间】:2015-11-16 20:39:12
【问题描述】:

我是 node.js 的新手,所以这可能是一个愚蠢的错误。 我有一个这样的 mongodb 架构:

seller_schema = mongoose.Schema({    
    name:String,
    email:String,
    trainers:[{ type: mongoose.Schema.Types.ObjectId, ref: 'trainers' }]
});
seller_collection=db.model('seller',seller_schema);

而 trainer_collection 是:

trainer_schema = mongoose.Schema({
        trainer_fname:String,
        trainer_lname:String,
        trainer_photo:String
        });
trainer_collection=db.model('trainers',trainer_schema);

我有一个将卖家添加到数据库的功能。培训师的数量因情况而异。所以,我在调用.save 函数之前实现$push 来添加额外的培训师。

function createSeller(req, res){
var seller = new seller_collection({
        name: req.query.first_name,
         email:req.query.email

});
for(i=0;i<req.query.num_trainers;i++){
    try{
    var trainer_object={ "trainer_fname": req.query.trainer_fname,
                         "trainer_lname": req.query.trainer_lname,
                         "trainer_photo": req.query.trainer_photo
                         }
    console.log(seller._id);
        seller_collection.update({ _id: seller._id },{
                $push: {
                    "trainers":trainer_object
                }
        },function(error,course){
            console.log(error);
            if(error){
                res.status(500).json({
                    message: "failure",
                    status_code:"500",
                    error:error
                });
            }else{
                res.status(200).json({
                    message: "success",
                    status_code:"200"
                });
            }
        });

     }catch(ex){
        console.log(ex);
        res.status(500).json({
                    message: "failure",
                    status_code:"500",
                    res:res
        });
     }
}
}

堆栈跟踪:

{ [CastError: Cast to undefined failed for value "[object Object]" at path "trainers"]
      stack: 'Error\n    at MongooseError.CastError (C:\\path\\node_modules\\mongoose\\lib\\error\\cast.js:18:16)  at
    SchemaArray.cast (C:\\path\\node_modules\\mongoose\\lib\\schema\\array.js:156:15) at SchemaArray.cast (C:\\path\\node_modules\\mongoose\\lib\\schema\\array.js:167:17) at Query._castUpdateVal (C:\\path\\node_modules\\mongoose\\lib\\query.js:2357:22)\n    at Query._
    walkUpdatePath (C:\\path\\node_modules\\mongoose\\lib\\query.js:2273:27) at Query._castUpdate (C:\\path\\node_modules\\mongoose\\lib\\query.js:2202:23)
     at Query.update (C:\\path\\node_modules\\mongoose\\lib\\query.js:2035:22)\n    at Function.update (C:\\path\\node_modules\\mongoose\\lib\\model.js:174
    1:13) at createSeller (C:\path\\routes\\seller.js:269:31)  at Query.<anonymous> (C:\\path\\routes\\seller.js:12:21)  at C:\\path\\node_modules\\mongoose\\node_modules\\kareem\\index.js:177:19  at C:\\path\\node_modules\\mongoose\\node_modules\\kareem\\index.js:109:16 at process._tickCallback (node.js:355:11)',
      message: 'Cast to undefined failed for value "[object Object]" at path "trainers"',
      name: 'CastError',
      kind: undefined,
      value: [{"trainer_photo":"x"}],
      path: 'trainers' }

【问题讨论】:

  • 你的 trainers 对象看起来像一个字符串或未解析的 JSON。
  • 我不确定这意味着什么。根据架构,培训师的格式是正确的。
  • 你的 trainers 对象不是一个对象,而是一个字符串。不是 {} 而是 "[object Object]".
  • 您的 ref 也需要是 trainers。关于字符串,因为它在“”之间 :) 对象:在 $push 之前创建您的对象。看看是否有帮助。然后发送您刚刚创建的对象。

标签: node.js mongodb mongoose


【解决方案1】:

对于任何面临同样问题的人。

我在这样的架构中更改了 trainers 字段trainers:[trainer_schema] 并将$push方法编辑为seller.trainers.push(trainer_object);

【讨论】:

    猜你喜欢
    • 2016-02-23
    • 2013-02-06
    • 2013-06-17
    • 2018-03-17
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2016-05-06
    相关资源
    最近更新 更多