Как вы можете удалить все документы из коллекции с Мангустом?


Я знаю, как...

  • удалить один документ.
  • удалить саму коллекцию.
  • удалите все документы из коллекции с помощью Mongo.

но я не знаю как удалить все документы из коллекции с Мангуста. Я хочу сделать это, когда пользователь нажимает кнопку. Я предполагаю, что мне нужно отправить запрос 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.контроллер.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);
}
4 56

4 ответа:

DateTime.remove({}, callback) пустой объект будет соответствовать всем из них.

в MongoDB, БД.коллекция.метод 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 delete в файл 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!');
                }
            });
        });

.remove() устарела. вместо этого мы можем использовать deleteMany

DateTime.deleteMany({}, callback).

есть несколько инструментов со встроенными операторами для MongoDB.

Mac:https://github.com/jeromelebel/MongoHub-Mac

Windows:https://robomongo.org

быстро и легко :)