Saya tahu bagaimana ...
- Hapus satu dokumen.
- Hapus koleksinya sendiri.
- Hapus semua dokumen dari koleksi dengan Mongo.
Tapi saya tidak tahu bagaimana menghapus semua dokumen dari koleksi dengan Mongoose. Saya ingin melakukan ini saat pengguna mengklik tombol. Saya berasumsi bahwa saya perlu mengirim permintaan AJAX ke beberapa titik akhir dan meminta titik akhir melakukan penghapusan, tetapi saya tidak tahu bagaimana menangani penghapusan di titik akhir.
Dalam contoh saya, saya memiliki Datetime
koleksi, dan saya ingin menghapus semua dokumen saat pengguna mengklik tombol.
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
sumber
sumber
Jawaban:
DateTime.remove({}, callback)
Objek kosong akan cocok dengan semuanya.sumber
Use deleteOne, deleteMany or bulkWrite instead.
di luwak github.com/Automattic/mongoose/issues/6880.remove()
sudah ditinggalkan. sebagai gantinya kita bisa menggunakan deleteManyDateTime.deleteMany({}, callback)
.sumber
Di MongoDB, metode db.collection.remove () menghapus dokumen dari koleksi. Anda dapat menghapus semua dokumen dari koleksi, menghapus semua dokumen yang cocok dengan kondisi, atau membatasi operasi untuk menghapus hanya satu dokumen.
Sumber: Mongodb .
Jika Anda menggunakan mongo sheel, lakukan saja:
Dalam kasus Anda, Anda membutuhkan:
Anda tidak menunjukkan tombol hapus, jadi tombol ini hanyalah sebuah contoh:
<a class="button__delete"></a>
Ubah pengontrol menjadi:
exports.destroy = function(req, res, next) { Datetime.remove({}, function(err) { if (err) { console.log(err) } else { res.end('success'); } } ); };
Masukkan metode hapus ajax ini di file js klien Anda:
$(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!'); } }); });
sumber
<button ng-click="clear()">Clear</button>
.Versi shell MongoDB v4.2.6
Node v14.2.0
Dengan asumsi Anda memiliki Model Tur: 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;
Sekarang Anda ingin menghapus semua tur sekaligus dari MongoDB Anda, saya juga memberikan kode koneksi untuk terhubung dengan cluster jarak jauh. Saya menggunakan deleteMany (), jika Anda tidak meneruskan argumen ke deleteMany (), maka itu akan menghapus semua dokumen dalam koleksi 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); } };
sumber