MongoDBBeginner
Schema ডিফাইন
Mongoose Schema কী, field type, nested schema, options এবং এর পুরো নিয়ম — বাংলায়।
10টি অংশবাংলা ভাষায়
Schema কী?
Schema হলো document-এর blueprint — কোন field থাকবে, কী type-এর হবে, কোনটা required — সবই এখানে define করা হয়। Schema থেকেই পরে Model তৈরি হয়।
সাধারণ schemajs
js
import mongoose from "mongoose";
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true, lowercase: true },
age: { type: Number, min: 13 },
isActive: { type: Boolean, default: true },
tags: { type: [String], default: [] },
createdAt: { type: Date, default: Date.now },
});Built-in Types
| Type | ব্যবহার |
|---|---|
String | Text, email, name |
Number | সংখ্যা (int/float) |
Date | তারিখ ও সময় |
Boolean | সত্য/মিথ্যা |
Buffer | Binary data (photo, file) |
ObjectId | অন্য document-এর reference |
Array | List of values |
Mixed | যেকোনো type (যত্নে ব্যবহার করুন) |
Decimal128 | নিখুঁত decimal (money) |
Map | Dynamic key-value object |
Nested Schema
Nested + array of objectsjs
js
const addressSchema = new mongoose.Schema({
city: String,
zip: String,
country: { type: String, default: "BD" },
});
const userSchema = new mongoose.Schema({
name: String,
address: addressSchema, // nested document
orders: [
{
product: { type: String, required: true },
quantity: { type: Number, default: 1 },
},
], // array of subdocuments
});Schema Options
Timestamps সহjs
js
const postSchema = new mongoose.Schema(
{
title: { type: String, required: true },
body: String,
},
{
timestamps: true, // createdAt, updatedAt নিজে থেকেই যুক্ত হয়
versionKey: false, // __v field না রাখতে
strict: true, // schema-তে নেই এমন field নেবে না (default)
}
);strict: false সাবধানে
strict: false দিলে schema-তে নেই এমন field-ও save হবে — যা অবাঞ্ছিত ডেটা জমা করে। সাধারণত strict: true (default) রেখে দরকারি field স্পষ্টভাবে বাড়ান।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।