Mongoose를 사용하여 컬렉션에서 모든 문서를 제거하려면 어떻게해야합니까?


91

방법을 알아 ...

  • 단일 문서를 제거합니다.
  • 컬렉션 자체를 제거합니다.
  • Mongo를 사용하여 컬렉션에서 모든 문서를 제거합니다.

하지만 Mongoose를 사용하여 컬렉션에서 모든 문서를 제거하는 방법을 모르겠습니다. 사용자가 버튼을 클릭 할 때 이것을하고 싶습니다. 일부 엔드 포인트에 AJAX 요청을 보내고 엔드 포인트에서 제거를 수행해야한다고 가정하지만 엔드 포인트에서 제거를 처리하는 방법을 모르겠습니다.

내 예에서는 Datetime컬렉션이 있고 사용자가 버튼을 클릭 할 때 모든 문서를 제거하려고합니다.

api / datetime / index.js

'use strict';

var express = require('express');
var controller = require('./datetime.controller');

var router = express.Router();

router.get('/', controller.index);
router.get('/:id', controller.show);
router.post('/', controller.create);
router.put('/:id', controller.update);
router.patch('/:id', controller.update);
router.delete('/:id', controller.destroy);

module.exports = router;

api / datetime / datetime.controller.js

'use strict';

var _ = require('lodash');
var Datetime = require('./datetime.model');

// Get list of datetimes
exports.index = function(req, res) {
  Datetime.find(function (err, datetimes) {
    if(err) { return handleError(res, err); }
    return res.json(200, datetimes);
  });
};

// Get a single datetime
exports.show = function(req, res) {
  Datetime.findById(req.params.id, function (err, datetime) {
    if(err) { return handleError(res, err); }
    if(!datetime) { return res.send(404); }
    return res.json(datetime);
  });
};

// Creates a new datetime in the DB.
exports.create = function(req, res) {
  Datetime.create(req.body, function(err, datetime) {
    if(err) { return handleError(res, err); }
    return res.json(201, datetime);
  });
};

// Updates an existing datetime in the DB.
exports.update = function(req, res) {
  if(req.body._id) { delete req.body._id; }
  Datetime.findById(req.params.id, function (err, datetime) {
    if (err) { return handleError(res, err); }
    if(!datetime) { return res.send(404); }
    var updated = _.merge(datetime, req.body);
    updated.save(function (err) {
      if (err) { return handleError(res, err); }
      return res.json(200, datetime);
    });
  });
};

// Deletes a datetime from the DB.
exports.destroy = function(req, res) {
  Datetime.findById(req.params.id, function (err, datetime) {
    if(err) { return handleError(res, err); }
    if(!datetime) { return res.send(404); }
    datetime.remove(function(err) {
      if(err) { return handleError(res, err); }
      return res.send(204);
    });
  });
};

function handleError(res, err) {
  return res.send(500, err);
}

ajax 삭제로 삭제 경로를 만들어야합니다. html 코드 버튼을 보여주세요.

이제 도와 드릴 수 있습니다. 잠시만 기다려주세요. 코드를 작성하겠습니다.

html 버튼을 보여주세요.

@MrBearAndBear-아직 버튼에 대한 코드를 작성하지 않았습니다. 버튼은 AJAX 요청을 끝점에 제출하기 만하면됩니다. 끝점을 구성하는 방법 만 알면됩니다.
Adam Zerner 2015 년

내 대답 @AdamZerner 체크 아웃

답변:


146

DateTime.remove({}, callback) 빈 개체는 모두 일치합니다.


16
.remove ()는 더 이상 사용되지 않습니다. Use deleteOne, deleteMany or bulkWrite instead.몽구스의 github.com/Automattic/mongoose/issues/6880
페드로 루즈

@PedroLuz 저는 1 년 동안 몽구스를 사용하지 않았습니다. 내 답변을 업데이트하게되어 기쁘지만 최신 버전의 문서에 여전히 Model # remove가 표시됩니다. 당신이 연결 한 토론은 mongo가 그들을 비추천했지만 mongoose는 그렇지 않다고 말합니다. "xyz .. 이전 버전"에서 명시 적으로 사용할 수 있도록 지원 중단 목록 (또는 제거 될 것으로 예상되는 버전)에 추가 된 특정 릴리스가 있습니까?
chrisbajorin

2
삭제가되지 않습니다
gazdagergo

DeprecationWarning : collection.remove는 더 이상 사용되지 않습니다. 대신 deleteOne, deleteMany 또는 bulkWrite를 사용하십시오. @chrisbajorin
Anthony

70

.remove()더 이상 사용되지 않습니다. 대신 deleteMany를 사용할 수 있습니다.

DateTime.deleteMany({}, callback).


15

MongoDB에서 db.collection.remove () 메서드는 컬렉션에서 문서를 제거합니다. 컬렉션에서 모든 문서를 제거하거나, 조건과 일치하는 모든 문서를 제거하거나, 단일 문서 만 제거하도록 작업을 제한 할 수 있습니다.

출처 : Mongodb .

mongo sheel을 사용하는 경우 다음을 수행하십시오.

db.Datetime.remove({})

귀하의 경우에는 다음이 필요합니다.

삭제 버튼을 표시하지 않았으므로이 버튼은 예시 일뿐입니다.

<a class="button__delete"></a>

컨트롤러를 다음으로 변경하십시오.

exports.destroy = function(req, res, next) {
    Datetime.remove({}, function(err) {
            if (err) {
                console.log(err)
            } else {
                res.end('success');
            }
        }
    );
};

이 ajax 삭제 메소드를 클라이언트 js 파일에 삽입하십시오.

        $(document).ready(function(){
            $('.button__delete').click(function() {
                var dataId = $(this).attr('data-id');

                if (confirm("are u sure?")) {
                    $.ajax({
                        type: 'DELETE',
                        url: '/',
                        success: function(response) {
                            if (response == 'error') {
                                console.log('Err!');
                            }
                            else {
                                alert('Success');
                                location.reload();
                            }
                        }
                    });
                } else {
                    alert('Canceled!');
                }
            });
        });

Mongoose로이 작업을 수행 할 수있는 방법이 있습니까? 내 스택은 Angular / Express / Node / Mongo입니다. 각도 풀 스택 생성기를 사용하고 있습니다. mongo 명령을 직접 실행하는 방법을 잘 모르겠습니다. 항상 Mongoose를 사용했습니다.
Adam Zerner 2015 년

당신의 경로를 정의하기 위해 급행을 사용하고 있습니까?

Angular를 사용하고 있으므로 버튼은 <button ng-click="clear()">Clear</button>.
Adam Zerner

죄송합니다. 답변을 업데이트하겠습니다. 모든 컬렉션을 삭제하고 싶은지 몰랐습니다. my로 코드를 업데이트하면 삭제 프로세스가 끝날 때 페이지가 다시로드됩니다.

0

MongoDB 셸 버전 v4.2.6
노드 v14.2.0

투어 모델이 있다고 가정합니다 : tourModel.js

const mongoose = require('mongoose');

const tourSchema = new mongoose.Schema({
  name: {
    type: String,
    required: [true, 'A tour must have a name'],
    unique: true,
    trim: true,
  },
  createdAt: {
    type: Date,
    default: Date.now(),
  },
});
const Tour = mongoose.model('Tour', tourSchema);

module.exports = Tour;

이제 MongoDB에서 모든 투어를 한 번에 삭제하고 원격 클러스터에 연결하기위한 연결 코드도 제공합니다. deleteMany ()를 사용했는데, 인수를 deleteMany ()에 전달하지 않으면 Tour 컬렉션의 모든 문서가 삭제됩니다.

const mongoose = require('mongoose');
const Tour = require('./../../models/tourModel');
const conStr = 'mongodb+srv://lord:<PASSWORD>@cluster0-eeev8.mongodb.net/tour-guide?retryWrites=true&w=majority';
const DB = conStr.replace('<PASSWORD>','ADUSsaZEKESKZX');
mongoose.connect(DB, {
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
  })
  .then((con) => {
    console.log(`DB connection successful ${con.path}`);
  });

const deleteAllData = async () => {
  try {
    await Tour.deleteMany();
    console.log('All Data successfully deleted');
  } catch (err) {
    console.log(err);
  }
};
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.