Mongoose-错误:'CastError:值“”转换为ObjectId失败;{name:'Rando



错误:
'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();
      }
   })
})

相关内容

最新更新