Je sais comment...
- Supprimez un seul document.
- Supprimez 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 point de terminaison et que le point de terminaison effectue la suppression, mais je ne sais pas comment gérer la suppression au point de terminaison.
Dans mon exemple, j'ai une Datetime
collection 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);
}
javascript
mongodb
mongoose
Adam Zerner
la source
la source
Réponses:
DateTime.remove({}, callback)
L'objet vide correspondra à tous.la source
Use deleteOne, deleteMany or bulkWrite instead.
dans mangouste github.com/Automattic/mongoose/issues/6880.remove()
est obsolète. à la place, nous pouvons utiliser deleteManyDateTime.deleteMany({}, callback)
.la source
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 qui correspondent à une condition ou limiter l'opération pour ne supprimer qu'un seul document.
Source: Mongodb .
Si vous utilisez mongo sheel, faites simplement:
Dans votre cas, vous avez besoin de:
Vous ne m'avez pas montré le bouton de suppression, donc ce bouton n'est qu'un exemple:
<a class="button__delete"></a>
Changez 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!'); } }); });
la source
<button ng-click="clear()">Clear</button>
.Version du shell MongoDB v4.2.6
Node v14.2.0
En supposant que vous ayez un modèle de tournée: 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;
Maintenant, vous souhaitez supprimer toutes les visites à la fois de votre MongoDB, je fournis également un code de connexion pour vous connecter au cluster distant. J'ai utilisé deleteMany (), si vous ne passez aucun argument à deleteMany (), alors il supprimera tous les documents de la collection 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); } };
la source