javascript - 从猫鼬模型传递嵌套的 JSON 数据不起作用
问题描述
我正在将嵌套的 JSON 数据推送到数据库。这就是我的架构的样子,
const mongoose = require('mongoose');
// original Schema
const dataSourceSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: { type: String, required: true, unique: true },
type: { type: String, required: true },
projectId: { type: mongoose.Schema.Types.ObjectId, ref: 'Project', required: true },
config:{type: String, required: true}
});
module.exports = mongoose.model('DataSource', dataSourceSchema);
我想将以下 json 数据传递给我的 dataSourceSchema,
{
“name”:”JdbcSourceConnector”,
"type" :"string",
“config”: {
“connector.class”:” io.confluent.connect.jdbc.JdbcSourceConnector”,
“tasks.max”:1,
“connection.url”:”<connection to connect to database along with username and password>”,
“mode”:”incrementing”,
“incrementing.column.name”:”<incrementing column name in table>”,
“topic.prefix”:”test-mysql-jdbc-”
}
}
但它不接受,会给出铸造错误或“,”预期。
所以我尝试了这个,
const dataSourceSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: { type: String, required: true, unique: true },
type: { type: String, required: true },
projectId: { type: mongoose.Schema.Types.ObjectId, ref: 'Project', required: true },
config:{
connector.class:{ type: String, required: true },
tasks.max:{ type: String, required: true },
connection.url:{ type: String, required: true },
mode:{ type: String, required: true },
incrementing.column.name:{ type: String, required: true },
topic.prefix:{ type: String, required: true }
}
});
这个架构也给了我错误,“,”是预期的。
如果我只传递我在原始模式中提到的字符串,则数据将存储在 db 中。但我想传递嵌套的 json 数据,请指导我正确的方向。我也试过stringify
数据,它不起作用。
解决方案
正如我所看到的,错误在于用接近答案的第二个模式定义你的模式。更改您的架构如下:
const dataSourceSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: { type: String, required: true, unique: true },
type: { type: String, required: true },
projectId: { type: mongoose.Schema.Types.ObjectId, ref: 'Project', required: true },
config:{
connectorClass:{ type: String, required: true },
tasksMax:{ type: String, required: true },
connectionUrl:{ type: String, required: true },
mode:{ type: String, required: true },
incrementingColumnName:{ type: String, required: true },
topicPrefix:{ type: String, required: true }
}
});
我建议进行更改,因为 mongoose 不理解其模式的键列中的点表示法,因此您收到了您提到的错误。
如果您出于某种原因想要使用点表示法,则将密钥封装在 " 而不是出现在代码片段中的特殊字符中。
Ps - 不要忘记更改 json 中的键名
推荐阅读
- javascript - TENSORFLOW.JS 3D 姿势估计不起作用
- android - 面向 Android 12 及更高版本的应用需要为“android:exported”指定一个显式值,但我有这样的值
- github - Toast UI Editor 在 Github 上编辑文件?
- jenkins - Jenkins 2.303.1 升级后 ProjectMatrixAuthorizationStrategy 管理员用户/密码不起作用
- android - 尝试在空对象引用上调用虚拟方法“int android.graphics.Bitmap.getWidth()”
- checkbox - 更改复选框的默认行为
- javascript - React - 使用 window.onClick 事件监听器导航元素
- nuxt.js - Nuxt Auth loginWith() 加载微调器?
- google-sheets - 逐页获取 google 电子表格的评论
- python - 我正在尝试更新 django 中默认用户的电子邮件