node.js - MongoDb:在数组中推送文档时出错
问题描述
我需要后端方面的帮助。我正在使用邮递员,这是我的后端模型:
name: {
type: String,
required: [true, 'Department Name is Required']
},
description: {
type: String,
required: [true, 'Description is Required']
},
agents: [
{
agentId: {
type: String,
required: [true, 'Agent ID is Required']
},
createdOn: {
type: String,
default: new Date()
}
}
]
我想要做的是在代理数组中推送文档,但我遇到了一些错误。
路由和控制器如下:
Routes:
router.post('/enroll', (req, res) => {
UserController.enroll(req.body).then(result => res.send(result))
});
Controllers:
module.exports.enroll = (params) => {
return Department.findById({departmentId: params.departmentId}).then(department => {
department.agents.push({userId: params.userId})
return department.save().then((department, error) => {
return (err) ? false : true
})
})
}
这是我得到的错误: (node:9916) UnhandledPromiseRejectionWarning: CastError: Cast to ObjectId failed for value "{ departmentId: '60e27549c36af1272812c4e3' }" (type Object) at path "_id" for model "Department"
目标是查找部门 ID,并将推送我已经获取的代理 ID。
解决方案
尝试
改变
return Department.findById({departmentId: params.departmentId}).
到
return Department.findById(params.departmentId)
findById
只接受 id 而不是 Object
推荐阅读
- typo3 - 为每个前端插件加载特定的样式表 - TYPO3 Extbase
- python-3.x - 是否可以按照放置顺序对每个单独的列表项运行命令?
- excel - 右对齐字符串的两个部分
- node.js - 将 Cobertura.xml 转换为 html 报告
- c# - 使用 SQL、Lamda 或 LINQ 对数据进行分组
- javascript - 在 Vue.js 中处理 JSON 文件后 JSON 字符无效
- visual-studio - Visual Studio 2019 的材料主题
- hyperledger-fabric - 新的 RAFT orderer 无法检测到它属于应用程序通道
- java - 如何在不丢失格式的情况下使用 POI 替换“.docx”中的书签?
- wordpress-theming - 如何修复“无法读取未定义的属性‘addClass’”