错误:
'CastError:在路径"authors"'处,值"{name:"RandomName'}"转换为ObjectId失败
我正在使用post-man对一本书进行put请求,我的id为。我正在发送一个具有名称的键值对的正文:"whateverName"。
书的目标是在一个数组中有许多作者,每个书的一个属性称为"authors"。
这是控制器。
app.put("/book/update/:id", function(req, res) {
var author = req.body;
Book.findOneAndUpdate({_id: req.params.id}, {$push: {authors: author}}, {new: true}, function(err, book) {
if (err) {
console.log(err);
} else {
console.log("author inserted");
res.status(200).send();
}
})
})
这是Author模式。
```
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var AuthorSchema = new Schema({
name: String
});
module.exports = mongoose.model("Author", AuthorSchema);
```
这是Book模式。
```
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var BookSchema = new Schema({
title: String,
author: String,
category: String,
authors: [{type: Schema.ObjectId, ref: "Author"}]
});
module.exports = mongoose.model("Book", BookSchema);
```
为什么我在休息日过得这么艰难?有人能告诉我什么礼物吗?我只是想用参考资料把一个新作者(这是它自己的模型(推到一本特定的书上。
非常感谢:(
解决方案:您必须首先创建AUTHOR实例,然后在该函数内部,使用AUTHOR的返回值查找书籍,并通过将新创建的AUTHOR的id推送到数组来更新它。
app.put("/book/update/:id", function(req, res) {
Author.create(req.body, function(err, author) {
Book.findOneAndUpdate({_id: req.params.id}, {$push: {authors: author._id}}, {upsert: true}, function(err, book) {
if (err) {
console.log(err);
} else {
console.log("author inserted");
res.status(200).send();
}
})
})
})
实际上,您将author的_id存储在book-authors数组中。因此,您需要像这样传递作者数据[{array of _id’s}]
app.put("/book/update/:id", function(req, res) {
/***************************/
var author = req.body; // array of _id (ObjectId)
/***************************/
Book.findOneAndUpdate({_id: req.params.id}, {$push: {authors: author}}, {new: true}, function(err, book) {
if (err) {
console.log(err);
} else {
console.log("author inserted");
res.status(200).send();
}
})
})