Я хотел бы обновить данные, вставив массив в документ, но у меня возникла ошибка в res.send (err), вот мой код:
router.put('/update/:id', passport.authenticate('jwt', {session:false}), (req, res, next)=>{
User.findById(req.params.id, function(err, user) {
if (err) {
console.info(err);
return res.status(500).send({message: "Error"});
}
if (!user) {
return res.status(404).send({message: "User Not Found"});
}
Company.findById(req.body.company, function(err, company) {
var students = [req.params.id];
company.students = students.push(req.params.id);
// res.send(students);
company.save(function(err, company){
if (err){
return res.send(err);
// return res.status(500).send({message: "Cannot Update Company, please try again"});
}
return res.status(200).send({message: "Update User To Company Success.", company});
});
});
});
});
Вот подробности ошибки после return res.send (err); :
{
"errors": {
"students": {
"message": "Cast to ObjectID failed for value \"2\" at path \"students\"",
"name": "CastError",
"stringValue": "\"2\"",
"kind": "ObjectID",
"value": 2,
"path": "students",
"reason": {
"message": "Cast to ObjectId failed for value \"2\" at path \"students\"",
"name": "CastError",
"stringValue": "\"2\"",
"kind": "ObjectId",
"value": 2,
"path": "students"
}
}
},
"_message": "Company validation failed",
"message": "Company validation failed: students: Cast to ObjectID failed for value \"2\" at path \"students\"",
"name": "ValidationError"
}
Обновление, это Моя схема, я хотел бы добавить пользователя с идентификатором из UserSchema для студентов в CompanySchema:
const CompanySchema = mongoose.Schema({
nama:{
type : String,
require : true
},
alamat:{
type : String,
require : true
},
email:{
type : String,
require : true
},
telepon:{
type : String,
require : true
},
website:{
type : String,
require : true
},
status:{
type : String,
require : true
},
students:{
type : mongoose.Schema.Types.ObjectId,
ref : 'users'
}
});
const CompanySchema = mongoose.Schema({
nama:{
type : String,
require : true
},
alamat:{
type : String,
require : true
},
email:{
type : String,
require : true
},
telepon:{
type : String,
require : true
},
website:{
type : String,
require : true
},
status:{
type : String,
require : true
},
students:{
type : mongoose.Schema.Types.ObjectId,
ref : 'users'
}
});
Спасибо за все ваши ответы.
Я бы посоветовал вам распечатать объект компании, а также распечатать объект ошибки. Это даст вам больше информации о том, что происходит не так. Возможно, данные поступают не так, как нужно вашей модели.
В вашей схеме students должен быть объявлен как массив типа students: [{ type : mongoose.Schema.Types.ObjectId,ref : 'users' }]





Есть несколько причин, по которым ваш код не работает.
Я получил в своем терминале сообщение «TypeError: company.students.push не является функцией».
Я думаю, когда вы сохраняете req.params.id в varibale студентов, попробуйте передать его в идентификатор объекта мангуста. Нравится mongoose.Types.ObjectID(req.params.id)
Вы пытаетесь преобразовать строку в objectId. Для сохранения этого значения используйте mongoose.Types.ObjectId. Это решит вашу проблему. Сообщите мне, если это поможет. Спасибо
you are making two mistakes here
1) your schema type is ObjectId but you are pushing string
cast string to ObjectId : mongoose.Types.ObjectId
2) storing in students an array,which would become something like this
=> var students=[ObjectId('')]
3) now again before assinging to company.students you are pushing the
same objectId to students variable
try following lines
// var students = [req.params.id];you don't need this line
company.students.push(req.params.id)
Я получил "TypeError: company.students.push не является функцией"
убедитесь, что поле student является массивом student: [{type: db.Schema.Types.ObjectId, ref: ''}]
Model.findById() ожидает, что параметр будет действительным objectID со следующими описаниями
И в вашей ошибке указано, что вы пытаетесь передать ему "2", который не соответствует стандартам objectId. Вы должны передать правильный идентификатор findById.
Вы можете использовать validator, чтобы убедиться, верен ли ваш переданный параметр id. Что-то вроде
ну вы можете установить его с npm install validator
И подтвердите идентификатор
if (!validator.isMongoId(req.headers.postid)){
res.send("invalid post id ")
}
пс. validator дает вам действительно красивые способы проверки различных вещей
Ваш код возвращает ошибку «Не удается обновить компанию, попробуйте еще раз». Вместо этого, почему бы вам также не включить информацию из объекта "err" вместо того, чтобы отбросить ее. Это даст вам больше информации о том, что происходит.