从猫鼬模型传递嵌套的 JSON 数据不起作用

Posted

技术标签:

【中文标题】从猫鼬模型传递嵌套的 JSON 数据不起作用【英文标题】:passing nested JSON data from mongoose model is not working 【发布时间】:2018-12-20 16:38:47 【问题描述】:

我正在将嵌套的 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 


);

这个 Schema 也给了我错误,“,”是预期的。

如果我只传递我在原始模式中提到的字符串,则数据将存储在 db 中。 但我想传递嵌套的 json 数据,请指导我正确的方向。 我也试过stringify数据,它不起作用。

【问题讨论】:

您使用的是,这是一个特殊字符,请使用" 为避免转换错误,请使用Schema.Types.Mixed 而不是String 进行类似config:type: Schema.Types.Mixed, required: true 的配置 谢谢 Arifkhan,我会试试这个。 【参考方案1】:

在我看来,错误在于用您接近答案的第二个架构定义您的架构。按如下方式更改架构:

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 不理解其架构的键列中的点表示法,因此您收到了您提到的错误。

如果您出于某种原因想要使用点表示法,请将密钥封装在 " 中,而不是像您的代码 sn-p 中出现的特殊字符中。

附: - 不要忘记更改 json 中的键名

【讨论】:

感谢 aashisAilawadi,我想在我的 json 数据中使用 dot(.) 传递。你能帮我用 (.) 在数据中解析数据吗? @darshanan 我可以看到您使用的是字符“而不是常规的”。我建议您再次在编辑器中重新输入双引号并检查它们是否是标准双引号.

以上是关于从猫鼬模型传递嵌套的 JSON 数据不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 Q 的猫鼬嵌套填充不起作用

猫鼬嵌套查找不起作用[重复]

使用数组过滤器更新多个嵌套数组在猫鼬中不起作用

如何使用节点 js 从猫鼬模式中读取嵌套数组元素?

如何将数据从猫鼬模型显示/渲染到 ejs 文件

你如何从猫鼬中删除模型?