web-dev-qa-db-fra.com

Comment pouvez-vous supprimer tous les documents d'une collection avec Mongoose?

Je sais comment...

  • Supprimer un seul document.
  • Supprimer la collection elle-même.
  • Supprimez tous les documents de la collection avec Mongo.

Mais je ne sais pas comment supprimer tous les documents de la collection avec Mongoose. Je veux faire cela lorsque l'utilisateur clique sur un bouton. Je suppose que je dois envoyer une demande AJAX à un noeud final et que celui-ci effectue la suppression, mais je ne sais pas comment gérer la suppression sur le noeud final.

Dans mon exemple, j'ai une collection Datetime et je souhaite supprimer tous les documents lorsque l'utilisateur clique sur un bouton.

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);
}
71
Adam Zerner

DateTime.remove({}, callback) L'objet vide va correspondre à tous.

122
cdbajorin

.remove() est obsolète. à la place, nous pouvons utiliser deleteMany

DateTime.deleteMany({}, callback).

34
Henok Tesfaye

Dans MongoDB, la méthode db.collection.remove () supprime les documents d'une collection. Vous pouvez supprimer tous les documents d'une collection, supprimer tous les documents correspondant à une condition ou limiter l'opération à la suppression d'un seul document.

Source: Mongodb .

Si vous utilisez du mongo sheel, faites simplement:

db.Datetime.remove({})

Dans votre cas, vous avez besoin de:

Vous ne m'avez pas montré le bouton de suppression, alors ce bouton n'est qu'un exemple:

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

Changer le contrôleur pour:

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

Insérez cette méthode de suppression ajax dans votre fichier js client:

        $(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!');
                }
            });
        });
12
user3998237