带有引用数组的 Mongoose 模型架构:CastError:值“[object Object]”转换为 ObjectId 失败

2024-05-03

我用express.js 和mongoosejs 构建了一个博客网站。一篇文章可能有一个或多个类别。当我创建新文章时,出现错误:

{ [CastError: Cast to ObjectId failed for value "[object Object]" at path "categories"]
  message: 'Cast to ObjectId failed for value "[object Object]" at path "categories"',
  name: 'CastError',
  type: 'ObjectId',
  value: [ [object Object] ],
  path: 'categories' }

有人可以帮我吗? 相关代码如下:

The Article模型定义如下:

var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var ArticleSchema = new Schema({
created: {  type: Date, default: Date.now},
title: String,
content: String,
summary: String,
categories: [{ 
    type: Schema.ObjectId, 
    ref: 'Category' }]
});
mongoose.model('Article', ArticleSchema);

And the Category模型定义如下:

var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var CategorySchema = new Schema({
  parent: {
    type: Schema.ObjectId,
  },
  name: String,
  subs: [CategorySchema]
});
mongoose.model('Category', CategorySchema);

当我创建一篇新文章并像这样保存它时:

exports.create = function(req, res) {
  console.log(req.body);
  var article = new Article(req.body);
  article.user = req.user;
  console.log(article);
  article.save(function(err) {
    if (err) {
        console.log(err);
        return res.jsonp(500, {
            error: 'Cannot save the article'
        });
    }
    res.jsonp(article);
  });
};

当被称为create函数中,console.log() 输出如下所示:

// console.log(req.body);
{ title: 'This is title',
  content: '<p>content here</p>',
  categories:
   [ { _id: '53c934bbf299ab241a6e0524',
     name: '1111',
     parent: '53c934b5f299ab241a6e0523',
     __v: 0,
     subs: [],
     sort: 1 } ],
  updated: [ 1405697477413 ] }

// console.log(article);
{ 
  title: 'This is title',
  content: '<p>content here</p>',
  _id: 53c93dc5b1c3b8e80cb4936b,
  categories: [],
  created: Fri Jul 18 2014 23:31:17 GMT+0800 (中国标准时间) }

// console.log(err);
{ [CastError: Cast to ObjectId failed for value "[object Object]" at path "categories"]
  message: 'Cast to ObjectId failed for value "[object Object]" at path "categories"',
  name: 'CastError',
  type: 'ObjectId',
  value: [ [object Object] ],
  path: 'categories' }

我用谷歌搜索了很多,但没有运气。请帮我!


Update:感谢格尔戈的回答。 但如果我用几乎相同的代码更新现有文章,它就可以正常工作!为什么?代码如下所示:

var mongoose = require('mongoose'),
    Category = mongoose.model('Category'),
    _ = require('lodash');

exports.update = function(req, res) {
console.log(req.body);
var article = req.article;
article = _.extend(article, req.body);
console.log(article);
article.save(function(err) {
    if (err) {
        return res.jsonp(500, {
            error: 'Cannot update the article'
        });
    }
    res.jsonp(article);

  });
};

输出如下:

// console.log(req.body);
{ _id: '53ca42f418bfb23c1e04df02',
    summary: 'tttt',
    title: 'tt',
    content: '<p>tttt</p>',
    __v: 2,
    categories: [ { _id: '53c934bbf299ab241a6e0524', name: '1111' } ],
    created: '2014-07-19T10:05:40.183Z'
}

// console.log(article);
{ _id: 53ca42f418bfb23c1e04df02,
    title: 'tt',
    content: '<p>tttt</p>',
    __v: 2,
    categories: [ { _id: 53c934bbf299ab241a6e0524, name: '1111', subs: [], sort: 0
    } ],
    created: Sat Jul 19 2014 18:05:40 GMT+0800 (中国标准时间) 
}

这工作正常。


您的文章架构需要一系列ObjectId:

var ArticleSchema = new Schema({
  ...
  categories: [{ 
    type: Schema.Types.ObjectId, 
    ref: 'Category' }]
});

However req.body包含一个类别对象:

categories:
   [ { _id: '53c934bbf299ab241a6e0524',
     name: '1111',
     parent: '53c934b5f299ab241a6e0523',
     __v: 0,
     subs: [],
     sort: 1 } ]

Mongoose 无法将类别对象转换为ObjectId。这就是您收到错误的原因。确保categories in req.body仅包含 id:

{ title: 'This is title',
  content: '<p>content here</p>',
  categories: [ '53c934bbf299ab241a6e0524' ],
  updated: [ 1405697477413 ] }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有引用数组的 Mongoose 模型架构:CastError:值“[object Object]”转换为 ObjectId 失败 的相关文章

随机推荐

  • 如何在android中的视频视图中获取视频的总长度

    我有一个问题 我想获取在视频视图中运行的视频的总长度 为此我正在使用视频视图的 getDuration 方法 但当我将其与 currentPosition 进行比较时 它总是返回 1 实际上我希望如果视频的当前位置等于视频的总长度那么它应该
  • Azure DevOps 扩展自定义 UI

    我的任务是开发 Azure DevOps 的扩展以自动化构建过程 自定义构建任务 需要注意的是 实际上我正在开发的是一系列构建任务 每个任务都包含常规输入 但由于历史原因 所有这些构建任务都应该分组 用户可以从管道设置中任务页面的下拉列表中
  • wpf 调试错误输出 System.WIndows.Data 错误 25

    我有一个自定义样式的组合框 效果很好 它被放置在用户控件内并绑定到数据结构 我使用 DisplayMemberPath 仅显示组合框文本框中的一个元素 ComboBox 样式取自 MSDN 并被多次使用 所以这里就不显示了
  • Python Suds URLError 名称或服务未知问题

    有一个奇怪的问题 我可以成功创建一个 suds 客户端并将其打印出来 gt gt gt client Client the wsdl url gt gt gt print client Suds https fedorahosted org
  • Node2vec 的工作原理

    我一直在读关于node2vec https cs stanford edu jure pubs node2vec kdd16 pdf嵌入算法 我有点困惑它是如何工作的 作为参考 node2vec 由 p 和 q 参数化 并通过模拟来自节点的
  • C#:如何在虚拟模式下有效过滤(隐藏)ListView 项目?

    C 如何在虚拟模式下有效过滤 隐藏 ListView 项目 我正在寻找一种在虚拟模式下过滤 隐藏 显示 ListView 中的项目的方法 我将我的项目缓存在列表视图项目数组中 如何有效地使其在按下过滤按钮时仅显示特定的列表视图项目 然后在按
  • 使用多个列组重塑 Pandas Dataframe

    我目前有一个宽数据框 如下所示 Index ID1 ID2 Foc A Foc B Foc C Sat A Sat B Sat C 0 r 1 10 15 17 100 105 107 1 r 2 20 25 27 110 115 117
  • 为什么GCC不报告未初始化的变量?

    include
  • 单例模式面试

    我最近在一次采访中被问到与java相关的问题 代码如下 因为我对java非常陌生 几乎没有用Java编写代码 所以我真的不知道下面的代码是做什么的 问题是 使用以下代码选择描述最糟糕情况的选项 public class Bolton pri
  • java.lang.IllegalStateException:密码未初始化

    我已经在 Android 应用程序中实现了加密 解密 我添加了一个加密类 该类已成为单例类 部分代码如下 public class Encryption private SecretKeySpec mKey null private Cip
  • 获取当前 URL/URI,不带某些 $_GET 变量

    在 Yii 中如何获取当前页面的 URL 例如 http www yoursite com your yii application lg pl id 15 但不包括 GET lg 无需手动解析字符串 我的意思是 我正在寻找类似的东西Yii
  • android:应用内计费:错误响应:7:项目已拥有

    我正在学习为我的应用程序实现应用程序内计费 以便人们可以在按下捐赠按钮时捐赠美元 用户可以多次捐赠 即购买的是消耗品 下面的代码来自 TrivalDrive 示例和网上的一些教程 Code IabHelper mHelper static
  • 如何使用jq通配符

    我有以下 json details car bmw addresses ext 118 21 8 0 29 version 4 addr 89 Psr version 6 addr 56 apT The key ext 118 21 8 0
  • 应用程序从最近的应用程序列表中滑出后,Android 服务崩溃

    我有一项由活动启动 未绑定 的服务 如果活动被破坏 例如按后退按钮 服务将继续运行 这当然是有意的 但是 如果我将活动从 最近的应用程序 列表中删除 该服务将立即重新启动 这是可重现的 每次活动 应用程序从列表中滑出时 都会对服务的 onC
  • 在哪里使用引号?

    CSS 中应在何处以及如何使用引号 width 150px or width 150px height 50 or height 50 font family Verdana or font family Verdana 仅当属性值中包含空
  • 与 .Net 中的 IIS SMTP 服务器进行有意义的交互

    我们的公司每周都会向大量订阅者发送新闻通讯 当公司还很年轻时 在我加入之前 他们使用了一些群发邮件程序的 免费 版本 花了六个小时才发送 5K 封邮件 并且违反了互联网上的每一次反向 DNS 检查 我将其升级为定制的 Net 小部件 该小部
  • PostSharp AssemblyLoadException Autofac

    我正在设置一个新的解决方案 我想在其中使用最新的 Autofac 3 4 和 PostSharp 3 1 42 引用 NuGet 包后 出现以下错误 并且我无法弄清楚发生了什么 我从未选择 Autofac 3 3 0 包 包 config
  • Rails 是否支持侦听 UDP 套接字的简洁方式?

    在 Rails 中 集成更新模型某些元素的 UDP 侦听过程的最佳方式是什么 特别是向其中一个表添加行 简单的答案似乎是在同一进程中使用 UDP 套接字对象启动一个线程 但不清楚我应该在哪里执行适合 Rails 方式的操作 有没有一种巧妙的
  • 制作单行带有水平滚动条的 div

    好吧 我想我已经使用空白修复了这个问题 无换行 它在 Chrome 中工作 但在其他方面不起作用 我有这样的事情 div class outer ul li div class inner a href img src eg1 jpg a
  • 带有引用数组的 Mongoose 模型架构:CastError:值“[object Object]”转换为 ObjectId 失败

    我用express js 和mongoosejs 构建了一个博客网站 一篇文章可能有一个或多个类别 当我创建新文章时 出现错误 CastError Cast to ObjectId failed for value object Objec