最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

猫鼬链接模型

运维笔记admin15浏览0评论

猫鼬链接模型

猫鼬链接模型

对Mongoose和nosql数据库不熟悉。我有以下猫鼬模型(配置文件)。

import { model, Schema } from 'mongoose';
import Joi from '@hapi/joi';

const profileSchema = new Schema({
  user: {
    type: Schema.Types.ObjectId,
    ref: 'users',
  },
  handle: {
    type: String,
    minlength: 2,
    maxlength: 20,
    required: true,
    trim: true,
  },
  company: {
    type: String,
    minlength: 1,
    maxlength: 100,
    trim: true,
  },
  website: {
    type: String,
    maxlength: 100,
    trim: true,
  },
  location: {
    type: String,
    maxlength: 100,
    trim: true,
  },
  status: {
    type: String,
    maxlength: 50,
    trim: true,
    required: true,
  },
  skills: {
    type: [String],
    required: true,
  },
  bio: {
    type: String,
    maxlength: 500,
    trim: true,
  },
  githubUserName: {
    type: String,
    maxlength: 50,
    trim: true,
  },
  socialLinks: {
    youtube: {
      type: String,
      maxlength: 100,
      trim: true,
    },
    twitter: {
      type: String,
      maxlength: 100,
      trim: true,
    },
    facebook: {
      type: String,
      maxlength: 100,
      trim: true,
    },
    linkedin: {
      type: String,
      maxlength: 100,
      trim: true,
    },
    instagram: {
      type: String,
      maxlength: 100,
      trim: true,
    },
  },
  date: {
    type: Date,
    default: Date.now,
  },
});

export default model('profile', profileSchema);

export const validateProfile = (profile) => {
  const schema = Joi.object({
    handle: Joi.string().trim().min(2).max(20).required(),
    company: Joi.string().trim().min(2).max(20),
    website: Joi.string().trim().max(100),
    location: Joi.string().trim().min(2).max(20),
    status: Joi.string().trim().min(2).max(20),
    skills: Joi.array().required(),
    bio: Joi.string().trim().max(500),
    githubUserName: Joi.string().max(50),
    youtube: Joi.string().trim().max(100),
    twitter: Joi.string().trim().max(100),
    facebook: Joi.string().trim().max(100),
    linkedin: Joi.string().trim().max(100),
    instagram: Joi.string().trim().max(100),
  });

  return schema.validate(profile);
};

每个个人资料都可以具有多种经验。这是我的经验模型。

import { model, Schema } from 'mongoose';
import Joi from '@hapi/joi';

const experienceSchema = new Schema({
  title: {
    type: String,
    maxlength: 100,
    trim: true,
    required: true,
  },
  company: {
    type: String,
    maxlength: 100,
    trim: true,
    required: true,
  },
  location: {
    type: String,
    maxlength: 100,
    trim: true,
    required: true,
  },
  from: {
    type: Date,
    required: true,
  },
  to: {
    type: Date,
  },
  current: {
    type: Boolean,
    default: false,
  },
  description: {
    type: String,
    maxlength: 500,
    trim: true,
  },
});

export default model('experience', experienceSchema);

export const validateExperience = (profile) => {
  const schema = Joi.object({
    title: Joi.string().trim().max(100).required(),
    company: Joi.string().trim().max(100).required(),
    location: Joi.string().trim().max(100).required(),
    from: Joi.date().required(),
    to: Joi.date(),
    current: Joi.boolean().default(false),
    description: Joi.string().trim().max(500),
  });

  return schema.validate(profile);
}

;

我想将此体验模型链接到个人档案模型。经验是数组。那么,如何将该体验模型数组链接到个人资料模型?首先,我考虑将体验数组保留在概要模型中,但这会使模型太大。我想在这里分开。这里应该有什么更好的做法?

回答如下:

您可以在Profile Schema中添加一个字段experience_ids,它将在Profile Schema中保存经验ID

experience_ids: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'experience'
  }]

您可以像这样填充经验:

Profile
 .find()
 .populate('experience_ids')
 .exec(...)

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论