使用猫鼬保存嵌套模型的JSON对象

时间:2019-07-26 08:36:41

标签: json mongodb mongoose nested

我有一个JSON对象,该对象最多三个层次,每个层次都是一个单独的文档模型。

我一直在尝试将该对象用作模板,并逐步进行遍历,并将其返回并返回_id。我尝试了几种循环方法,并提出了基于承诺的方法,但是结果却很复杂。

任何建议都会很棒。

这是一个Node.js应用,并使用Mongoose软件包进行建模。

// tslint:disable-next-line: one-variable-per-declaration
export const x = {
  title: "a title",
  startDate: "a date time string",
  __type: "programmeModel",
  modules: [
    {
      name: "a module name",
      startDate: "a string",
      endDate: "a string",
      __type: "moduleModel",
      activities: [
        {
          type: "a string",
          description: "a string",
        __type: "ActivityModule"},
        {
          type: "a string",
          description: "a string",
        __type: "ActivityModule"
        },
        {
          type: "a string",
          description: "a string",
          __type: "ActivityModule"
        },
      ]},
    {
      name: "a module name",
      startDate: "a string",
      endDate: "a string",
      activities: []
    },
  {
    name: "a module name",
    startDate: "a string",
    endDate: "a string",
    activities: [
      {
        type: "a string",
        description: "a string",
        __type: "ActivityModule"
      },
      {
        type: "a string",
        description: "a string",
        __type: "ActivityModule"
      },
      {
        type: "a string",
        description: "a string",
        __type: "ActivityModule"
      },
]},
]
};

当我使用区分符将所有文档保存在单个集合/数据库中时,模型包含一个__type字段。

const ProgrammeSchema: Schema = new Schema({
  _id: Schema.Types.ObjectId,
  title: {
    type: String,
    required: true,
    default: "",
  },
  subtitle: {
    type: String,
    required: false,
    default: "",
  },
  organizationId: {
    type: Number,
    required: false,
  },
  published: {
    type: Boolean,
    required: true,
    default: false,
  },
  startDate: Date,
  endDate: Date,
  modules: [{ type: Schema.Types.ObjectId, ref: "ModuleModel" }],
});

const ModuleSchema: Schema = new Schema({
  _id: Schema.Types.ObjectId,
  title: {
    type: String,
    required: true,
    default: "",
  },
  subtitle: {
    type: String,
    required: false,
    default: "",
  },
  startDate: {
    type: Date,
    required: false,
  },
  endDate: {
    type: Date,
    required: false,
  },
  active: {
    type: Boolean,
    default: true,
  },
  imageUrl: {
    type: String,
    required: false,
  },
  activities: [{ type: Schema.Types.ObjectId, ref: "ActivityModel" }],
});


const ActivitySchema: Schema = new Schema({
  _id: Schema.Types.ObjectId,
  title: {
    type: String,
    required: true,
    default: "",
  },
  subtitle: {
    type: String,
    required: false,
    default: "",
  },
  description: {
    type: String,
    required: false,
    default: "",
  },
  startDate: {
    type: Date,
    required: false,
  },
  endDate: {
    type: Date,
    required: false,
  },
  imageUrl: {
    type: String,
    required: false,
    default: "",
  },
});

回顾一下,我一直在尝试保留程序,模块和活动的JSON对象。任何建议都很好。

0 个答案:

没有答案