'Mongoose User contacts feature

I am building a user model in mongoose, nodesjs where the each user has set of contacts which are actually users, each contact is a user.

I have two approaches

Approach 1 Is to add the contacts as an array of user objects to reference User model in the user model as an array of contacts but i want to determine the Date and time of when was the contact was added, i don't know how to add that

const UserSchema = new mongoose.Schema({
  name: {
    type: String,
    required: [true, 'Please enter a name'],
  },
  username: {
    type: String,
    match: [
      /^(?!.*\.\.)(?!.*\.$)[^\W][\w.]{0,29}$/,
      'Please enter a valid user name',
    ],
  },
  password: {
    type: String,
    required: [true, 'Please enter a password'],
    minLength: 6,
    select: false,
  },
  role: {
    type: String,
    enum: ['user'],
    default: 'user',
  },
  resetPasswordToken: String,
  resetPasswordExpire: Date,
  allowAutoApproveContacts: {
    type: Boolean,
    default: false,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
  contacts: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'User',
    },
  ],
});

**Approach 2 ** is to create a new model Contact and reference the user model as user and the User model again as the contact, and add the addedAt Date to determine when was the contact was added and maybe add other properties

const ContactSchema = new mongoose.Schema({
  user: {
    type: mongoose.Schema.ObjectId,
    ref: 'User',
    required: true,
  },
  contact: {
    type: mongoose.Schema.ObjectId,
    ref: 'User',
    required: true,
  },
  addedAt: {
    type: Date,
    default: Date.now,
  },
  autoAllowed: Boolean,
});

Can you please help me with which approach is the correct approach or if you can suggest a new one



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source