Wiem jak...
- Usuń pojedynczy dokument.
- Usuń samą kolekcję.
- Usuń wszystkie dokumenty z kolekcji za pomocą Mongo.
Ale nie wiem, jak usunąć wszystkie dokumenty z kolekcji za pomocą Mongoose. Chcę to zrobić, gdy użytkownik kliknie przycisk. Zakładam, że muszę wysłać żądanie AJAX do jakiegoś punktu końcowego i poprosić punkt końcowy o usunięcie, ale nie wiem, jak obsłużyć usunięcie w punkcie końcowym.
W moim przykładzie mam Datetime
kolekcję i chcę usunąć wszystkie dokumenty, gdy użytkownik kliknie przycisk.
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
źródło
źródło
Odpowiedzi:
DateTime.remove({}, callback)
Pusty obiekt będzie pasował do nich wszystkich.źródło
Use deleteOne, deleteMany or bulkWrite instead.
in mongoose github.com/Automattic/mongoose/issues/6880.remove()
jest przestarzałe. zamiast tego możemy użyć deleteManyDateTime.deleteMany({}, callback)
.źródło
W MongoDB metoda db.collection.remove () usuwa dokumenty z kolekcji. Możesz usunąć wszystkie dokumenty z kolekcji, usunąć wszystkie dokumenty spełniające warunek lub ograniczyć operację do usunięcia tylko jednego dokumentu.
Źródło: Mongodb .
Jeśli używasz sznura mongo, po prostu wykonaj:
W twoim przypadku potrzebujesz:
Nie pokazałeś mi przycisku usuwania, więc ten przycisk to tylko przykład:
<a class="button__delete"></a>
Zmień kontroler na:
exports.destroy = function(req, res, next) { Datetime.remove({}, function(err) { if (err) { console.log(err) } else { res.end('success'); } } ); };
Wstaw tę metodę usuwania Ajax do pliku js klienta:
$(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!'); } }); });
źródło
<button ng-click="clear()">Clear</button>
.Wersja powłoki MongoDB, wersja 4.2.6 Node, wersja
14.2.0
Zakładając, że masz model wycieczki: 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;
Teraz chcesz usunąć wszystkie wycieczki naraz ze swojego MongoDB, podam również kod połączenia, aby połączyć się ze zdalnym klastrem. Użyłem deleteMany (), jeśli nie przekażesz żadnych argumentów do deleteMany (), spowoduje to usunięcie wszystkich dokumentów w kolekcji 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); } };
źródło