gpt4 book ai didi

javascript - Mongoose - 错误 : 'CastError: Cast to ObjectId failed for value "{ name: 'RandomName' }"at path "authors"'

转载 作者:行者123 更新时间:2023-12-03 06:00:46 27 4
gpt4 key购买 nike

错误:
'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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com