Yo se como...
- Eliminar un solo documento.
- Eliminar la colección en sí.
- Elimina todos los documentos de la colección con Mongo.
Pero no sé cómo eliminar todos los documentos de la colección con Mongoose. Quiero hacer esto cuando el usuario hace clic en un botón. Supongo que necesito enviar una solicitud AJAX a algún punto final y que el punto final haga la eliminación, pero no sé cómo manejar la eliminación en el punto final.
En mi ejemplo, tengo una Datetime
colección y quiero eliminar todos los documentos cuando el usuario hace clic en un botón.
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
fuente
fuente
Respuestas:
DateTime.remove({}, callback)
El objeto vacío coincidirá con todos ellos.fuente
Use deleteOne, deleteMany or bulkWrite instead.
en mongoose github.com/Automattic/mongoose/issues/6880.remove()
es obsoleto. en su lugar podemos usar deleteManyDateTime.deleteMany({}, callback)
.fuente
En MongoDB, el método db.collection.remove () elimina documentos de una colección. Puede eliminar todos los documentos de una colección, eliminar todos los documentos que coincidan con una condición o limitar la operación para eliminar solo un documento.
Fuente: Mongodb .
Si está usando mongo sheel, simplemente haga:
En tu caso, necesitas:
No me mostró el botón de eliminar, por lo que este botón es solo un ejemplo:
<a class="button__delete"></a>
Cambie el controlador a:
exports.destroy = function(req, res, next) { Datetime.remove({}, function(err) { if (err) { console.log(err) } else { res.end('success'); } } ); };
Inserte este método de eliminación de ajax en el archivo js de su cliente:
$(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!'); } }); });
fuente
<button ng-click="clear()">Clear</button>
.MongoDB shell versión v4.2.6
Nodo v14.2.0
Suponiendo que tiene un modelo de viaje: 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;
Ahora desea eliminar todos los recorridos a la vez de su MongoDB, también proporciono el código de conexión para conectarse con el clúster remoto. Usé deleteMany (), si no pasa ningún argumento a deleteMany (), eliminará todos los documentos de la colección 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); } };
fuente