Câu trả lời:
Nếu bạn không cảm thấy muốn lặp lại, hãy thử FBFriendModel.find({ id:333 }).remove( callback );
hoặcFBFriendModel.find({ id:333 }).remove().exec();
mongoose.model.find
trả về một Truy vấn , có remove
chức năng .
Cập nhật cho Mongoose v5.5.3 - remove()
hiện không được chấp nhận. Sử dụng deleteOne()
, deleteMany()
hoặcfindOneAndDelete() instead.
.exec()
tuy nhiên điều này hoàn toàn không. Có .exec()
cần thiết, có tác dụng phụ để sử dụng nó hay không?
CẬP NHẬT: Phiên bản Mongoose (5.5.3)
remove () không được dùng nữa và thay vào đó, bạn có thể sử dụng removeOne (), removeMany () hoặc BulkWrite ().
Vì "mongoose": ">=2.7.1"
bạn có thể xóa tài liệu trực tiếp bằng .remove()
phương pháp thay vì tìm tài liệu và sau đó xóa tài liệu đó có vẻ hiệu quả và dễ bảo trì hơn.
Xem ví dụ:
Model.remove({ _id: req.body.id }, function(err) {
if (!err) {
message.type = 'notification!';
}
else {
message.type = 'error';
}
});
CẬP NHẬT:
Đối với cầy mangut 3.8.1
, có một số phương pháp cho phép bạn xóa trực tiếp một tài liệu, giả sử:
remove
findByIdAndRemove
findOneAndRemove
Tham khảo tài liệu API mongoose để biết thêm thông tin.
remove(query)
có khả năng có thể làm trống toàn bộ bộ sưu tập của bạn nếu bạn vô tình vượt qua query = {}
. Vì lý do đó tôi thích findOneAndRemove(query)
nếu tôi chỉ xóa một tài liệu.
Model.remove({ _id: 'whatever' }).exec().then(...)
docs
là một mảng các tài liệu. Vì vậy, nó không có một mongooseModel.remove()
phương pháp.
Bạn có thể lặp và loại bỏ từng tài liệu trong mảng riêng biệt.
Hoặc - vì có vẻ như bạn đang tìm tài liệu bằng một id duy nhất (có thể) - sử dụng findOne
thay vì find
.
Điều này đối với tôi là tốt nhất kể từ phiên bản 3.8.1:
MyModel.findOneAndRemove({field: 'newValue'}, function(err){...});
Và nó chỉ yêu cầu một cuộc gọi DB. Sử dụng điều này cho rằng bạn không thực hiện bất kỳ remove
hành động nào để tìm kiếm và loại bỏ.
pre 'remove'
các hành động thì nó hoạt động tốt.
Đơn giản chỉ cần làm
FBFriendModel.remove().exec();
mongoose.model.find()
trả về một đối tượng truy vấn cũng có remove()
chức năng.
Bạn cũng có thể sử dụng mongoose.model.findOne()
nếu bạn muốn xóa chỉ một tài liệu duy nhất.
Khác, bạn có thể làm theo cách tiếp cận truyền thống cũng như nơi đầu tiên bạn lấy tài liệu và sau đó xóa.
yourModelObj.findById(id, function (err, doc) {
if (err) {
// handle error
}
doc.remove(callback); //Removes the document
})
Sau đây là các cách trên model
đối tượng bạn có thể thực hiện bất kỳ thao tác nào sau đây để xóa (các) tài liệu:
yourModelObj.findOneAndRemove(conditions, options, callback)
yourModelObj.findByIdAndRemove(id, options, callback)
yourModelObj.remove(conditions, callback);
var query = Comment.remove({ _id: id });
query.exec();
remove()
đã bị phản đối Sử dụng deleteOne()
, deleteMany()
hoặcbulkWrite()
.
Mã tôi sử dụng
TeleBot.deleteMany({chatID: chatID}, function (err, _) {
if (err) {
return console.log(err);
}
});
(node:9132) DeprecationWarning: collection.remove is deprecated. Use deleteOne, deleteMany, or bulkWrite instead.
Để khái quát bạn có thể sử dụng:
SomeModel.find( $where, function(err,docs){
if (err) return console.log(err);
if (!docs || !Array.isArray(docs) || docs.length === 0)
return console.log('no docs found');
docs.forEach( function (doc) {
doc.remove();
});
});
Một cách khác để đạt được điều này là:
SomeModel.collection.remove( function (err) {
if (err) throw err;
// collection is now empty but not deleted
});
Hãy cẩn thận với findOne và loại bỏ!
User.findOne({name: 'Alice'}).remove().exec();
Đoạn mã trên loại bỏ TẤT CẢ người dùng có tên 'Alice' thay vì chỉ người đầu tiên .
Nhân tiện, tôi thích xóa các tài liệu như thế này:
User.remove({...}).exec();
Hoặc cung cấp một cuộc gọi lại và bỏ qua exec ()
User.remove({...}, callback);
model.remove({title:'danish'}, function(err){
if(err) throw err;
});
Tham chiếu: http://mongoosejs.com/docs/api.html#model_Model.remove
Nếu bạn đang tìm kiếm chỉ một đối tượng bị xóa, bạn có thể sử dụng
Person.findOne({_id: req.params.id}, function (error, person){
console.log("This object will get deleted " + person);
person.remove();
});
Trong ví dụ này, Mongoose sẽ xóa dựa trên kết hợp req.params.id.
Để xóa tài liệu, tôi thích sử dụng Model.remove(conditions, [callback])
Vui lòng tham khảo tài liệu API để xóa: -
http://mongoosejs.com/docs/api.html#model_Model.remove
Trong trường hợp này, mã sẽ là: -
FBFriendModel.remove({ id : 333 }, function(err, callback){
console.log(‘Do Stuff’);
})
Nếu bạn muốn xóa tài liệu mà không cần chờ phản hồi từ MongoDB, đừng vượt qua cuộc gọi lại, thì bạn cần gọi exec trên Truy vấn được trả về
var removeQuery = FBFriendModel.remove({id : 333 });
removeQuery.exec();
Bạn chỉ có thể sử dụng truy vấn trực tiếp trong hàm remove, vì vậy:
FBFriendModel.remove({ id: 333}, function(err){});
Bạn luôn có thể sử dụng chức năng tích hợp Mongoose:
var id = req.params.friendId; //here you pass the id
FBFriendModel
.findByIdAndRemove(id)
.exec()
.then(function(doc) {
return doc;
}).catch(function(error) {
throw error;
});
Cập nhật: không dùng nữa .remove()
nhưng điều này vẫn hoạt động cho các phiên bản cũ hơn
YourSchema.remove({
foo: req.params.foo
}, function(err, _) {
if (err) return res.send(err)
res.json({
message: `deleted ${ req.params.foo }`
})
});
sử dụng phương thức remove () bạn có thể xóa.
getLogout(data){
return this.sessionModel
.remove({session_id: data.sid})
.exec()
.then(data =>{
return "signup successfully"
})
}
Điều này làm việc cho tôi, chỉ cần thử điều này:
const id = req.params.id;
YourSchema
.remove({_id: id})
.exec()
.then(result => {
res.status(200).json({
message: 'deleted',
request: {
type: 'POST',
url: 'http://localhost:3000/yourroutes/'
}
})
})
.catch(err => {
res.status(500).json({
error: err
})
});
Model.remove
không được chấp nhận
Theo câu trả lời của Samyak Jain, tôi sử dụng Async Await
let isDelete = await MODEL_NAME.deleteMany({_id:'YOUR_ID', name:'YOUR_NAME'});
Tôi thực sự thích mẫu này trong async / await các ứng dụng Express / Mongoose có khả năng :
app.delete('/:idToDelete', asyncHandler(async (req, res) => {
const deletedItem = await YourModel
.findByIdAndDelete(req.params.idToDelete) // This method is the nice method for deleting
.catch(err => res.status(400).send(err.message))
res.status(200).send(deletedItem)
}))
db.collection.remove(<query>,
{
justOne: <boolean>,
writeConcern: <document>
})