Example 1:
import mongoose from 'mongoose' const itemSchema = new mongoose.Schema( { name: { type: String, required: true, trim: true, maxlength: 50 }, status: { type: String, required: true, enum: ['active', 'complete', 'pastdue'], default: 'active' }, notes: String, due: Date, createdBy: { type: mongoose.SchemaTypes.ObjectId, ref: 'user', required: true }, list: { type: mongoose.SchemaTypes.ObjectId, ref: 'list', required: true } }, { timestamps: true } ) itemSchema.index({ list: 1, name: 1 }, { unique: true }) export const Item = mongoose.model('item', itemSchema)
Example 2:
import mongoose from 'mongoose' const listSchema = new mongoose.Schema( { name: { type: String, required: true, trim: true, maxlength: 50 }, description: String, createdBy: { type: mongoose.SchemaTypes.ObjectId, ref: 'user', required: true } }, { timestamps: true } ) listSchema.index({ user: 1, name: 1 }, { unique: true }) export const List = mongoose.model('list', listSchema)
Example 3:
import mongoose from 'mongoose' import bcrypt from 'bcrypt' const userSchema = new mongoose.Schema( { email: { type: String, required: true, unique: true, trim: true }, password: { type: String, required: true }, settings: { theme: { type: String, required: true, default: 'dark' }, notifications: { type: Boolean, required: true, default: true }, compactMode: { type: Boolean, required: true, default: false } } }, { timestamps: true } ) userSchema.pre('save', function(next) { if (!this.isModified('password')) { return next() } bcrypt.hash(this.password, 8, (err, hash) => { if (err) { return next(err) } this.password = hash next() }) }) userSchema.methods.checkPassword = function(password) { const passwordHash = this.password return new Promise((resolve, reject) => { bcrypt.compare(password, passwordHash, (err, same) => { if (err) { return reject(err) } resolve(same) }) }) } export const User = mongoose.model('user', userSchema)