Я толкаю вложенные данные 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 }
}
});
Я предложил изменение, поскольку мангуста не понимает точечную нотацию в ключевом столбце этой схемы, поэтому вы получили упомянутую вами ошибку.
Если вы хотите использовать точечную нотацию по какой-либо причине, инкапсулируйте ключ в ", а не в специальный символ, как показано в фрагменте кода.
Ps - Не забудьте изменить имена клавиш в json
“
который является специальным символом, используйте"
Schema.Types.Mixed
вместоString
для конфигурации, напримерconfig:{type: Schema.Types.Mixed, required: true}