错误:
'CastError: 路径“authors”处的值“{ name: 'RandomName' }”转换为 ObjectId 失败'
我正在使用 postman 对一本书发出 put 请求,我有该书的 _id。我正在发送一个带有名称键值对的正文:“whateverName”。
书籍的目标是在一个数组中包含许多作者,每本书的属性称为“作者”。
这是 Controller 。
app.put("/book/update/:id", function(req, res) {
var 作者 = req.body;
Book.findOneAndUpdate({_id: req.params.id}, {$push: {authors: 作者}}, {new: true}, function(err, book) {
如果(错误){
控制台.log(错误);
} 别的 {
console.log("作者插入");
res.status(200).send();
}
})
})
这是作者架构。
```
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var AuthorSchema = new Schema({
name: String
});
module.exports = mongoose.model("Author", AuthorSchema);
```
这是图书架构。
```
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 实例,然后在该函数内部,使用作者的返回值来查找一本书,并通过将新创建的作者的 id 推送到数组来更新它。
app.put("/book/update/:id", function(req, res) {
Author.create(req.body, function(err, 作者) {
Book.findOneAndUpdate({_id: req.params.id}, {$push: {authors:author._id}}, {upsert: true}, function(err, book) {
如果(错误){
控制台.log(错误);
} 别的 {
console.log("作者插入");
res.status(200).send();
}
})
})
})
关于javascript - Mongoose - 错误 : 'CastError: Cast to ObjectId failed for value "{ name: 'RandomName' }"at path "authors"',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39756734/