Tech TutorBangla Web Documentation
Portfolio
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • MongoDB Documentation21টি অধ্যায়
প্রযুক্তি নির্বাচন
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Introduction
  • কেন Mongoose?
  • Installation
  • Connection
  • Schema
  • Model
  • Document
  • CRUD
  • Querying
  • Validation
  • Middleware
  • Population
  • Aggregation
  • Virtuals
  • Indexes
  • Error Handling
  • Update Operators
  • Transactions
  • Express Integration
  • Blog Project
  • Best Practices
  1. Docs
  2. MongoDB
  3. Middleware (pre/post hooks)
MongoDBIntermediate

Middleware (pre/post hooks)

Mongoose middleware: save/find/update/delete-এর আগে ও পরে custom logic চালানো — বাংলায়।

11টি অংশবাংলা ভাষায়

Middleware কী?

Mongoose middleware (hooks) হলো নির্দিষ্ট অপারেশনের আগে (pre) বা পরে (post) চলা function — যেমন password hash, updated timestamp, logging, cascade delete।

pre('save')

Password hash (pre save)js
js
import bcrypt from "bcryptjs";

const userSchema = new mongoose.Schema({
  email: { type: String, required: true },
  password: { type: String, required: true },
});

userSchema.pre("save", async function (next) {
  // শুধু password change হলে hash করব — বারবার নয়
  if (!this.isModified("password")) return next();

  this.password = await bcrypt.hash(this.password, 10);
  next();
});

// login-এ তুলনা করার জন্য সংক্ষিপ্ত helper method
userSchema.methods.comparePassword = function (candidate) {
  return bcrypt.compare(candidate, this.password);
};

post('findOneAndUpdate')

Update-এর পরের hookjs
js
postSchema.post("findOneAndUpdate", async function () {
  // this = query (update)
  const doc = this._update;
  if (doc && doc.$set && doc.$set.published === true) {
    await Stats.updateOne(
      { name: "posts" },
      { $inc: { publishedCount: 1 } },
      { upsert: true }
    );
  }
});

Delete-এর cleanup

Cascade deletejs
js
// User মুছে গেলে তার সব post-ও মুছে ফেলি
userSchema.pre("deleteOne", { document: true }, async function () {
  const userId = this._id;
  await Post.deleteMany({ author: userId });
});

// findByIdAndDelete দিলেও hook চলে —
// কারণ ভেতরে deleteOne query হয়
await User.findByIdAndDelete(userId);

Common hooks

Hookকখন চলে
pre/post('save')Document save-এর আগে/পরে
pre/post('validate')Validation-এর আগে/পরে
pre/post('find')find/findOne query-র আগে/পরে
pre/post('findOneAndUpdate')update query-র আগে/পরে
pre/post('deleteOne')delete deleteMany-এর আগে/পরে
pre/post('aggregate')Aggregation pipeline-এর আগে/পরে
Arrow function ব্যবহার করবেন না

Hook-এ function keyword ব্যবহার করুন — তাতে this-এর ভেতরে document বা query পাবেন। Arrow function ব্যবহার করলে this কাজ করবে না।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
আগেরSchema ValidationপরেরPopulation (Relationship)
এই পেজে
Tech Tutor

বাংলায় ওয়েব ডেভেলপমেন্ট ডকুমেন্টেশন শিখুন — ধাপে ধাপে।

Homeসব ডকুমেন্টেশনQuick Startআমার নোটস

© 2026 Tech Tutor. বাংলায় শিখুন, বাংলায় গড়ুন।

mdanamolhasan1998@gmail.com