How to delete document from mongodb?

Viewed 88

I've been stuck on this problem a few days... Basically, I am trying to delete one document from collection in mongoDB. In index I have a map of items that are shown from database and a "DeleteTest" component that has certain object from map passed. In that component, I have a button which when clicked triggers a function(deleteTestFun) to call API. In API I try to delete it but it doesn't seem to work... Also here is git link in case something is not clear. https://github.com/RennSter20/ReactStuff

Thanks :)

index

import React, { useState } from 'react';
import AppBar from '@mui/material/AppBar';
import Button from '@mui/material/Button';
import Card from '@mui/material/Card';
import CardActions from '@mui/material/CardActions';
import CardContent from '@mui/material/CardContent';
import CardMedia from '@mui/material/CardMedia';
import CssBaseline from '@mui/material/CssBaseline';
import Grid from '@mui/material/Grid';
import Stack from '@mui/material/Stack';
import Box from '@mui/material/Box';
import Toolbar from '@mui/material/Toolbar';
import Typography from '@mui/material/Typography';
import Container from '@mui/material/Container';
import Link from '@mui/material/Link';
import { createTheme, ThemeProvider } from '@mui/material/styles';
import Form from '../components/form';
import DeleteIcon from '@mui/icons-material/Delete';
import connectMongo from '../utlis/connectMongo';
import Test from '../models/testModel';
import Checkbox from '@mui/material/Checkbox';
import DeleteTest from '../components/deleteTest';
const theme = createTheme();

export default function Album({ tests }) {
  return (
    <div>
      <Form></Form>
      <div>
        {tests.map((test) => (
          <a key={test._id}>
            <p>
              {test.name} {test.email}
            </p>
            <DeleteTest test={test}></DeleteTest>
          </a>
        ))}
      </div>
    </div>
  );
}

export const getServerSideProps = async () => {
  try {
    console.log('CONNECTING TO MONGO');

    await connectMongo();

    console.log('CONNECTED TO MONGO');
    console.log('FETCHING DOCUMENTS');

    const tests = await Test.find();

    console.log('FETCHED DOCUMENTS');

    return {
      props: {
        tests: JSON.parse(JSON.stringify(tests)),
      },
    };
  } catch (error) {
    console.log(error);
    return {
      notFound: true,
    };
  }
};

deleteComponent

import React, { useState } from 'react';
import Button from '@mui/material/Button';
import CardActions from '@mui/material/CardActions';
import CardContent from '@mui/material/CardContent';
import CardMedia from '@mui/material/CardMedia';
import CssBaseline from '@mui/material/CssBaseline';
import Stack from '@mui/material/Stack';
import Box from '@mui/material/Box';
import Typography from '@mui/material/Typography';
import { createTheme, ThemeProvider } from '@mui/material/styles';
import DeleteIcon from '@mui/icons-material/Delete';

export default function DeleteTest(props) {
  const postID = props.test._id;
  const name = props.test.name;
  const deleteTestFun = async (postID) => {
    const response = await fetch('/api/delete/' + postID, {
      method: 'DELETE',
    });
    const data = await response.json();
    console.log(data);
  };

  //{props.test._id}
  return (
    <div>
      <Button onClick={deleteTestFun}>Delete</Button>
    </div>
  );
}

postID (API)

import connectMongo from '../../../utlis/connectMongo';
import Test from '../../../models/testModel';
import { MongoClient } from 'mongodb';
import mongoose from 'mongoose';
/**
 *
 * @param {import("next").NextApiRequest} req
 * @param {import("next").NextApiResponse} res
 */

export default async function deleteTest(req, res) {
  try {
    const object = Test.find({ _id: req.query.postID });
    console.log(object.name);
    await Test.findOneAndDelete({ name: req.query.name });
    res.send('Item deleted');
  } catch (error) {
    console.log(error);
  }
}

updated

export default async function deleteTest(req, res) {
    try{
      console.log(req.body.name);
      const test = await Test.remove(req.body)
      
    res.send('Item deleted');
    }catch(error)
    {
      console.log(error)
    }
  }
0 Answers
Related