首页 > 解决方案 > 如何将带有 SchemaType 选项的嵌套对象推送到猫鼬模型?

问题描述

我的猫鼬模型:

const mongoose = require('mongoose');

const { Schema } = mongoose;

const VacancySchema = new Schema(
    {
        parameters: []
    },
    { timestamps: true },
    { strict: false }
);
      
module.exports = mongoose.model('Vacancy', VacancySchema);

我正在尝试使用 mongoose 在 node.js 中创建一个动态模型。该parameters字段接受对象列表。这些对象是嵌套的 javascript 对象,其中包含一些数据和 SchemaType 选项type, trim, required, etc.,例如修改数据内容。我想将这些和类似的字段插入到parametersmongoose 中的数组中。

正如您可能已经猜到的那样,这些字段是动态的,我最初无法将它们保存在模型中。现在我面临的问题是,当我将这些对象存储到模型时,这些选项trim会失去它们的功能,即它们不起作用。如果我先插入这些选项,然后推送数据,这些字段就会被覆盖。解决这种情况的最佳方法是什么?

编辑:

要插入数据:

await Vacancy.create({
      parameters: paramArray,
      template: "some id",
      status: 0
  });

用户输入:

{
  client: "  ABC  ",
  name: " XYZ   ",
}

我存储为 json 的对象:

paramArray: [
  client: {
    type: String,
    trim: true,
    required: true,
    section: 0
  },
  name: {
    type: String,
    trim: true,
    section: 0
  }
]

预期结果:

数据库中的输出:(用户数据存储在数据库中,修剪操作应用于数据)

parameters: [{
    client: "ABC"
  },
  {
    name: "XYZ"
  }
]

标签: javascriptnode.jsmongodbmongoose

解决方案


您的 Mongoose 架构语法错误。我更正为;

const { Schema, model } = require('mongoose');

const VacancySchema = new Schema({
  parameters: [],
  timestamps: true,
  strict: false
});

const Vacancy = model('Vacancy', VacancySchema);

module.exports = Vacancy;

推荐阅读