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

标签 javascript node.js mongodb mongoose database

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

相关文章:

macos - OSX 上 MongoDB 的正常默认设置?

java - 从嵌套的用户定义对象中创建 DataFrame

javascript - 如何在 JavaScript 中获取 Google 日历事件的 ColorID

Javascript 获取错误的背景图像源

node.js - 如何将 docker 容器端口公开给另一个容器

node.js - 如何将配置从配置服务传递给 Nest.js 装饰器?

javascript - 如果没有定义对象,则对象默认为函数

javascript - querySelectorAll 和appendChild 的组合不起作用

javascript - 如何将域名映射到 Websocket 服务器(ws)nodejs?

为所有节点设置连续优先级时的 Mongodb 副本集选举