방법을 알아 …
- 단일 문서를 제거합니다.
- 컬렉션 자체를 제거합니다.
- Mongo를 사용하여 컬렉션에서 모든 문서를 제거합니다.
하지만 Mongoose를 사용하여 컬렉션에서 모든 문서를 제거하는 방법을 모르겠습니다. 사용자가 버튼을 클릭 할 때 이것을하고 싶습니다. 일부 엔드 포인트에 AJAX 요청을 보내고 엔드 포인트에서 제거를 수행해야한다고 가정하지만 엔드 포인트에서 제거를 처리하는 방법을 모르겠습니다.
내 예에서는 Datetime
컬렉션이 있고 사용자가 버튼을 클릭 할 때 모든 문서를 제거하려고합니다.
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);
}
답변
DateTime.remove({}, callback)
빈 개체는 모두 일치합니다.
답변
.remove()
더 이상 사용되지 않습니다. 대신 deleteMany를 사용할 수 있습니다.
DateTime.deleteMany({}, callback)
.
답변
MongoDB에서 db.collection.remove () 메서드는 컬렉션에서 문서를 제거합니다. 컬렉션에서 모든 문서를 제거하거나, 조건과 일치하는 모든 문서를 제거하거나, 단일 문서 만 제거하도록 작업을 제한 할 수 있습니다.
출처 : Mongodb .
mongo sheel을 사용하는 경우 다음을 수행하십시오.
db.Datetime.remove({})
귀하의 경우에는 다음이 필요합니다.
삭제 버튼을 표시하지 않았으므로이 버튼은 예시 일뿐입니다.
<a class="button__delete"></a>
컨트롤러를 다음으로 변경하십시오.
exports.destroy = function(req, res, next) {
Datetime.remove({}, function(err) {
if (err) {
console.log(err)
} else {
res.end('success');
}
}
);
};
이 ajax 삭제 메소드를 클라이언트 js 파일에 삽입하십시오.
$(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!');
}
});
});
답변
MongoDB 셸 버전 v4.2.6
노드 v14.2.0
투어 모델이 있다고 가정합니다 : 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;
이제 MongoDB에서 모든 투어를 한 번에 삭제하고 원격 클러스터에 연결하기위한 연결 코드도 제공합니다. deleteMany ()를 사용했는데, 인수를 deleteMany ()에 전달하지 않으면 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);
}
};