猫鼬模式与其他模式数组的字段

时间:2021-04-06 19:33:40

标签: node.js mongoose mongoose-schema

首先,我是初学者,目前,我正在研究社交媒体博客类型。 现在,我有了我的 userSchemapostSchema 模型:

用户模型

const userSchema = new mongoose.Schema({
  name: {
    type: String,
    required: [true, 'Please insert your name'],
  },
  email: {
    type: String,
    required: [true, 'Please insert your email'],
    unique: true,
    lowercase: true, //transform into lowercase / not validator
    validate: [validator.isEmail, 'Please provide a valid email'],
  },
  avatar: {
    type: String,
  },
  role: {
    type: String,
    enum: ['user', 'admin'],
    default: 'user',
  },
  password: {
    type: String,
    required: [true, 'Please provide a password'],
    minLength: 8,
    select: false,
  },
  passwordConfirm: {
    type: String,
    required: [true, 'Please confirm your password'],
    validate: {
      validator: function (el) {
        return el === this.password;
      },
      message: 'Passwords are not the same',
    },
  },
  passwordChangedAt: Date,
  posts: [] // ???????????????
});

发布模型

const postSchema = new mongoose.Schema({
  title: {
    type: String,
    required: [true, 'A post must have a title'],
  },
  author: {
    type: String,
    required: [true, 'A post must have a title'],
  },
  likes: {
    type: Number,
    default: 10,
  },
  comments: {
    type: [String],
  },
  image: {
    type: String,
  },
  postBody: {
    type: String,
    required: [true, 'A post must contain a body'],
  },
  createdAt: {
    type: Date,
    default: Date.now(),
    select: false,
  },
});

现在我不知道这是否是最好的方法,但我想在 userSchema 中有一个字段,其类型为 postSchema 数组,所以我会有为每个用户创建了自己的帖子。我可以这样做吗?如果不是我怎么能做到这一点? 我应该使用搜索参数字段来过滤作者的帖子吗?我真的很困惑我应该如何处理这种情况。谢谢各位

1 个答案:

答案 0 :(得分:2)

看看这个例子

const UserSchema = new mongoose.Schema({
    username: String,
    posts: [{
      type: mongoose.Schema.Types.ObjectId,
      ref: 'Post'
    }]
  })

const PostSchema = new mongoose.Schema({
    content: String,
    author: {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'User'
    }
  })

const Post = mongoose.model('Post', PostSchema, 'posts');
const User = mongoose.model('User', UserSchema, 'users');

module.exports = { User, Post };

信用:https://medium.com/@nicknauert/mongooses-model-populate-b844ae6d1ee7