对数组的强制转换失败,出现moongoose和di

2024-04-28 08:30:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我在mongodb中插入mongoose的数据时遇到问题

这是我的数据库.js型号:

var Appointment = new Schema({
  date: Date,
  coach: ObjectId,
      complement: String,
      isOwner: Boolean,
  fiter : ObjectId,
  fiters: [
    {
      user: ObjectId,
      isOwner: Boolean,
      status: String,
      invitationDate: Date
    }
  ],
  place: ObjectId,
  objectif : ObjectId,
  pricing: Number,
  status: String,
  ratings: [
    {
      date: Date,
      user: ObjectId,
      score: Number,
      comment: String,
      target: ObjectId,
      targetType: String
    }
  ],
  annulation : Boolean,
  late: Number,
  log: [{
    logType: String,
    date: Date,
    user: ObjectId,
    details: String,
    relatedTo: ObjectId
  }]
},
{
  timestamps: true
});

下面是我的python脚本测试:

appointment = { 
   "_id":idFiter,
    "date": "2016-09-25T00:00:00.0000000Z",
    "coach":"57dfd22f7f8effc700bfa16f",
    "fiters" : [
         {
      "user": "57da891db39797707093c6e1",
      "isOwner": False,    
      "status": "invite",
      "invitationDate": "2016-09-25T00:00:00.0000000Z",
    }],
    "place" : "57d66a5b73c0ab6c007beb74",
    "objectif": "57e28b64cae2161f33b641e3",


}
r = requests.post("http://127.0.0.1:8010/appointment/", data=appointment,headers=headers)
print(r.status_code)
print(r.content)

这里是我在nodejs和express中的输入点:

router.post('/', authenticate.passport.authenticate('bearer', { session: false }), function(req, res) {
  appointmentToInsert =
  {
       date : req.body.date,
       coach : req.body.coach,
       fiter : req.body._id,
       fiters : req.body.fiters,
       place : req.body.place,
       objectif : req.body.objectif,
       isOwner : true,

  };
  new Appointment(appointmentToInsert).save(function (error, appointment) {
    if (error == null) {
      res.status(200).send(appointment);
    } else {
      console.log(error);
      res.status(500).send(error);
    }
  });

});

错误如下:

{ [ValidationError: Appointment validation failed]
  message: 'Appointment validation failed',
  name: 'ValidationError',
  errors: 
   { fiters: 
      { [CastError: Cast to Array failed for value "[ 'status', 'isOwner', 'invitationDate', 'user' ]" at path "fiters"]
        message: 'Cast to Array failed for value "[ \'status\', \'isOwner\', \'invitationDate\', \'user\' ]" at path "fiters"',
        name: 'CastError',
        kind: 'Array',
        value: [Object],
        path: 'fiters',
        reason: [Object] } } }

所以这个错误似乎来自fiters dict字段,但我不明白为什么有人有任何线索。你知道吗

谢谢和问候


Tags: datestringstatusplacebodyreqappointmentobjectid
2条回答

Python脚本只发送fiters的字典键,请尝试添加.items()以发送2元组。我不确定你的ORM需要哪种格式。你知道吗

如果这不起作用,JSON还可以用来通过POST传递复杂的结构。你知道吗

答案是发送json而不是数据:

appointment = { 
   "_id":idFiter,
    "date": "2016-09-25T00:00:00.0000000Z",
    "coach":"57dfd22f7f8effc700bfa16f",
    "fiters" : [
         {
      "user": "57da891db39797707093c6e1",
      "isOwner": False,    
      "status": "invite",
      "invitationDate": "2016-09-25T00:00:00.0000000Z",
    }],
    "place" : "57d66a5b73c0ab6c007beb74",
    "objectif": "57e28b64cae2161f33b641e3",


}
r = requests.post("http://127.0.0.1:8010/appointment/", json=appointment,headers=headers)
print(r.status_code)
print(r.content)

相关问题 更多 >