🗄️ Database

MongoDB NoSQL Database

Last updated: 2025-09-25 02:29:54

MongoDB Document Database

MongoDB is a popular NoSQL database that stores data in flexible, JSON-like documents.

Basic MongoDB Operations

// Connect to MongoDB
const { MongoClient } = require('mongodb');

async function connectToMongoDB() {
  const client = new MongoClient('mongodb://localhost:27017');
  await client.connect();
  return client.db('myapp');
}

// Insert documents
async function insertUser(db, userData) {
  const result = await db.collection('users').insertOne({
    name: userData.name,
    email: userData.email,
    createdAt: new Date()
  });
  return result.insertedId;
}

// Insert multiple documents
async function insertMultipleUsers(db, users) {
  const result = await db.collection('users').insertMany(users);
  return result.insertedIds;
}

Querying Data

// Find documents
async function findUsers(db, query = {}) {
  return await db.collection('users').find(query).toArray();
}

// Find one document
async function findUserById(db, userId) {
  return await db.collection('users').findOne({ _id: userId });
}

// Complex queries
async function findActiveUsers(db) {
  return await db.collection('users').find({
    isActive: true,
    age: { $gte: 18 },
    $or: [
      { role: 'admin' },
      { role: 'moderator' }
    ]
  }).sort({ createdAt: -1 }).limit(10).toArray();
}

// Aggregation pipeline
async function getUserStats(db) {
  return await db.collection('users').aggregate([
    {
      $match: { isActive: true }
    },
    {
      $group: {
        _id: '$role',
        count: { $sum: 1 },
        averageAge: { $avg: '$age' }
      }
    },
    {
      $sort: { count: -1 }
    }
  ]).toArray();
}

Updating and Deleting

// Update one document
async function updateUser(db, userId, updateData) {
  const result = await db.collection('users').updateOne(
    { _id: userId },
    { 
      $set: updateData,
      $currentDate: { lastModified: true }
    }
  );
  return result.modifiedCount;
}

// Update many documents
async function deactivateOldUsers(db) {
  const oneYearAgo = new Date();
  oneYearAgo.setFullYear(oneYearAgo.getFullYear() - 1);
  
  const result = await db.collection('users').updateMany(
    { lastLogin: { $lt: oneYearAgo } },
    { $set: { isActive: false } }
  );
  return result.modifiedCount;
}

// Delete documents
async function deleteUser(db, userId) {
  const result = await db.collection('users').deleteOne({ _id: userId });
  return result.deletedCount;
}

// Delete many documents
async function deleteInactiveUsers(db) {
  const result = await db.collection('users').deleteMany({ isActive: false });
  return result.deletedCount;
}

Indexes and Performance

// Create indexes
async function createIndexes(db) {
  // Single field index
  await db.collection('users').createIndex({ email: 1 });
  
  // Compound index
  await db.collection('users').createIndex({ role: 1, isActive: 1 });
  
  // Text index for search
  await db.collection('users').createIndex({ 
    name: 'text', 
    email: 'text' 
  });
  
  // TTL index (auto-delete after time)
  await db.collection('sessions').createIndex(
    { createdAt: 1 },
    { expireAfterSeconds: 3600 } // 1 hour
  );
}

// Text search
async function searchUsers(db, searchTerm) {
  return await db.collection('users').find({
    $text: { $search: searchTerm }
  }).toArray();
}