Javascript 如何使用 Mongoose 从集合中删除所有文档?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/28139638/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can you remove all documents from a collection with Mongoose?
提问by Adam Zerner
I know how to...
我知道怎么...
- Remove a single document.
- Remove the collection itself.
- Remove all documents from the collection with Mongo.
- 删除单个文档。
- 删除集合本身。
- 使用 Mongo 从集合中删除所有文档。
But I don't know how to remove all documents from the collection with Mongoose. I want to do this when the user clicks a button. I assume that I need to send an AJAX request to some endpoint and have the endpoint do the removal, but I don't know how to handle the removal at the endpoint.
但我不知道如何使用猫鼬从集合中删除所有文档。我想在用户单击按钮时执行此操作。我假设我需要向某个端点发送 AJAX 请求并让端点执行删除操作,但我不知道如何在端点处理删除操作。
In my example, I have a Datetimecollection, and I want to remove all of the documents when the user clicks a button.
在我的示例中,我有一个Datetime集合,我想在用户单击按钮时删除所有文档。
api/datetime/index.js
api/日期时间/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
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);
}
回答by chrisbajorin
DateTime.remove({}, callback)The empty object will match all of them.
DateTime.remove({}, callback)空对象将匹配所有这些对象。
回答by Henok Tesfaye
.remove()is deprecated. instead we can use deleteMany
.remove()已弃用。相反,我们可以使用 deleteMany
DateTime.deleteMany({}, callback).
DateTime.deleteMany({}, callback).
回答by Henok Tesfaye
In MongoDB, the db.collection.remove() method removes documents from a collection. You can remove all documents from a collection, remove all documents that match a condition, or limit the operation to remove just a single document.
在 MongoDB 中,db.collection.remove() 方法从集合中删除文档。您可以从集合中删除所有文档,删除所有符合条件的文档,或将操作限制为仅删除单个文档。
Source: Mongodb.
来源:Mongodb。
If you are using mongo sheel, just do:
如果您使用的是 mongo sheel,请执行以下操作:
db.Datetime.remove({})
In your case, you need:
在您的情况下,您需要:
You didn't show me the delete button, so this button is just an example:
你没有给我看删除按钮,所以这个按钮只是一个例子:
<a class="button__delete"></a>
Change the controller to:
将控制器更改为:
exports.destroy = function(req, res, next) {
Datetime.remove({}, function(err) {
if (err) {
console.log(err)
} else {
res.end('success');
}
}
);
};
Insert this ajax delete method in your client js file:
在你的客户端 js 文件中插入这个 ajax delete 方法:
$(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!');
}
});
});
回答by Lord
MongoDB shell version v4.2.6
Node v14.2.0
MongoDB shell 版本 v4.2.6
Node v14.2.0
Assuming you have a Tour Model: tourModel.js
假设您有一个游览模型: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;
Now you want to delete all tours at once from your MongoDB, I also providing connection code to connect with the remote cluster. I used deleteMany(), if you do not pass any args to deleteMany(), then it will delete all the documents in Tour collection.
现在您想从 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);
}
};

