node.js - 得到一个 CastError,ObjectId 的值失败
问题描述
我有一条将文档数组插入集合的路线。我还想将文档的 _is 捕获到用户模式中,但我得到了 CastError,我该如何解决这个问题。这是我的代码:
错误:
(node:23088) UnhandledPromiseRejectionWarning: CastError: Cast to ObjectId failed for value "
{
_id: 6032c1df6761405a308736f0,
name: ' test1',
surname: 'test',
email: 'example@example.com',
phone: '0915461',
__v: 0
},
{
_id: 6032c1df6761405a308736f1,
name: 'jane',
surname: 'doe',
email: 'jane@gmail.com',
phone: '12345678',
__v: 0
}
]" at path "references"
路线:
app.post('/register_two/:id/references', async (req, res) => {
const staff = await Worker.findById(req.params.id);
const reference = await Reference.insertMany(req.body.references);
await staff.references.push(reference); <<--- Error when i try to push document IDs
});
我的参考架构:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ReferenceSchema = Schema({
name: String,
surname: String,
email: String,
phone: String
});
module.exports = mongoose.model('Reference', ReferenceSchema);
我的工人模式
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const WorkerSchema = new Schema({
name: String,
surname: String,
role: String,
nationality: String,
gender: String,
dateofbirth: Date,
contactnumber: String,
email: String,
address: String,
region: String,
righttowork: String,
righttoworkproof: String,
ninumber: String,
references: [
{
type: Schema.Types.ObjectId,
ref: 'Reference'
}
],
date: Date
});
module.exports = mongoose.model('Worker', WorkerSchema);
编辑:固定工作者模式
解决方案
您应该在选项设置为 true的情况下运行该insertMany
命令rawResult
const reference = await Reference.insertMany(req.body.references, {rawResult: true});
这样您就可以将 MongoDB 驱动程序的原始结果返回到reference
. 该结果将是一个包含此道具的对象:
...
...
insertedIds: { '0': 6032ce0ed7fd8568aef0d0cd, '1': 6032ce0ed7fd8568aef0d0ce, ... }
...
insertedIds
是你需要的,但你需要它们以数组的形式。因此,您的代码应如下所示:
const reference = await Reference.insertMany(req.body.references, {rawResult: true});
await staff.references.push(...Object.values(reference.insertedIds));
感谢 Emil C.,他指出,通过推送一个数组,我们只是在reference
路径内创建数组数组。传播就是答案。
推荐阅读
- c - C语言中的字符串追加函数
- javascript - 如何在 Javascript 中将 0x 协议 BigNumber 转换为字符串
- java - 找到将两个非常大的整数之和除以相等块的步骤
- xamarin - 我不能在我从计算机上传到项目的主要 activity.cs 中使用图片
- r - 如何重组其中一些在R中应具有相同值的列
- stata - 将同一分类变量下的两组相加
- search - 如何在 Extjs 的文本字段中包含小 x 按钮
- python - 使用 Selenium WebDriver 和 Python 按多个元素查找 div
- sql-server - 将 Django 连接到 Sql server 2019
- python - 在 Pandas 中使用列作为单元格值