Ich weiß wie...
- Entfernen Sie ein einzelnes Dokument.
- Entfernen Sie die Sammlung selbst.
- Entfernen Sie alle Dokumente mit Mongo aus der Sammlung.
Aber ich weiß nicht, wie ich mit Mongoose alle Dokumente aus der Sammlung entfernen soll. Ich möchte dies tun, wenn der Benutzer auf eine Schaltfläche klickt. Ich gehe davon aus, dass ich eine AJAX-Anfrage an einen Endpunkt senden muss und der Endpunkt die Entfernung durchführen muss, aber ich weiß nicht, wie ich die Entfernung am Endpunkt behandeln soll.
In meinem Beispiel habe ich eine Datetime
Sammlung und möchte alle Dokumente entfernen, wenn der Benutzer auf eine Schaltfläche klickt.
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
quelle
quelle
Antworten:
DateTime.remove({}, callback)
Das leere Objekt stimmt mit allen überein.quelle
Use deleteOne, deleteMany or bulkWrite instead.
in Mungo github.com/Automattic/mongoose/issues/6880.remove()
ist veraltet. Stattdessen können wir deleteMany verwendenDateTime.deleteMany({}, callback)
.quelle
In MongoDB entfernt die Methode db.collection.remove () Dokumente aus einer Sammlung. Sie können alle Dokumente aus einer Sammlung entfernen, alle Dokumente entfernen, die einer Bedingung entsprechen, oder den Vorgang einschränken, um nur ein einziges Dokument zu entfernen.
Quelle: Mongodb .
Wenn Sie Mongo Sheel verwenden, tun Sie einfach:
In Ihrem Fall benötigen Sie:
Sie haben mir die Schaltfläche "Löschen" nicht angezeigt, daher ist diese Schaltfläche nur ein Beispiel:
<a class="button__delete"></a>
Ändern Sie den Controller auf:
exports.destroy = function(req, res, next) { Datetime.remove({}, function(err) { if (err) { console.log(err) } else { res.end('success'); } } ); };
Fügen Sie diese Ajax-Löschmethode in Ihre Client-JS-Datei ein:
$(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!'); } }); });
quelle
<button ng-click="clear()">Clear</button>
.MongoDB-Shell-Version v4.2.6
Node v14.2.0
Angenommen, Sie haben ein Tour-Modell: 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;
Jetzt möchten Sie alle Touren auf einmal aus Ihrer MongoDB löschen. Außerdem gebe ich den Verbindungscode für die Verbindung mit dem Remote-Cluster an. Ich habe deleteMany () verwendet. Wenn Sie keine Argumente an deleteMany () übergeben, werden alle Dokumente in der Tour-Sammlung gelöscht.
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); } };
quelle