MongoDB 문서 삭제 방법 (deleteOne, deleteMany)

KUKJIN LEE's profile picture

KUKJIN LEE2개월 전 작성

MongoDB에서 문서를 삭제하려면 deleteOne()deleteMany() 메서드를 사용합니다.

 

1. deleteOne()

deleteOne()은 조건에 맞는 첫 번째 문서를 삭제하는 메서드입니다.

db.users.deleteOne({ name: 'Jin' });

users라는 collection에서 name 필드가 Jin 첫 문서를 삭제합니다.

 

2. deleteMany()

deleteMany()는 조건에 맞는 모든 문서를 삭제하는 메서드입니다.

db.users.deleteMany({ status: 'human' });

users collection에서 status가 human 문서를 모두 삭제합니다.

 

클라이언트에서 문서 삭제 요청 처리하기

사용자가 입력한 title을 기반으로 문서를 삭제 요청합니다.

'use client';

import { useState } from 'react';

export default function Home() {
  const [title, setTitle] = useState('');
  const [message, setMessage] = useState('');

  const handleDelete = async (e: React.FormEvent) => {
    e.preventDefault();
    try {
      const response = await fetch(`/api/delete?title=${title}`, {
        method: 'DELETE',
      });
      const result = await response.json();
      if (result.success) {
        setMessage('문서가 성공적으로 삭제되었습니다.');
      } else {
        setMessage(`오류 발생: ${result.error}`);
      }
    } catch (error) {
      setMessage(`오류 발생: ${error.message}`);
    }
  };

  return (
    <div className="p-8">
      <h1 className="text-2xl mb-4">문서 삭제</h1>
      <form onSubmit={handleDelete} className="space-y-4">
        <div>
          <label className="block text-lg">삭제할 문서 제목:</label>
          <input
            type="text"
            value={title}
            onChange={(e) => setTitle(e.target.value)}
            className="border p-2 w-full"
            required
          />
        </div>
        <button type="submit" className="bg-red-500 text-white py-2 px-4 rounded">
          삭제하기
        </button>
      </form>
      {message && <p className="mt-4 text-red-500">{message}</p>}
    </div>
  );
}

API 엔드포인트에서 삭제 처리

import { NextResponse } from 'next/server';
import clientPromise from '@/lib/mongodb';

export async function DELETE(request: Request) {
  try {
    const { searchParams } = new URL(request.url);
    const title = searchParams.get('title');
    if (!title) {
      return NextResponse.json({ success: false, error: '제목을 입력해주세요.' });
    }

    const client = await clientPromise;
    const db = client.db();
    const collection = db.collection('kakao');

    // MongoDB에서 title에 해당하는 문서를 삭제
    const result = await collection.deleteOne({ title });
    if (result.deletedCount === 0) {
      return NextResponse.json({ success: false, error: '삭제할 문서가 없습니다.' });
    }

    return NextResponse.json({ success: true, message: '문서가 성공적으로 삭제되었습니다.' });
  } catch (error) {
    return NextResponse.json({ success: false, error: error.message });
  }
}

클라이언트에서 요청한 title 기준으로 문서를 삭제하고 성공 여부를 클라이언트에 응답합니다.

New Tech Posts