[英]Why is document.remove() not working in Mongoose, Node.js?
問題:我嘗試在以下代碼中使用 document.remove() 從數據庫中刪除一個文檔,但它沒有從數據庫中刪除該文檔。 我確信 remove() 被調用是因為我為“remove”設置的 pre hook 被調用了。
// Delete - delete a player and update the team
router.delete("/:player_id", function(req, res) {
Player.findById(req.params.player_id, function(err, foundPlayer) {
if(err) {
console.log(err);
req.flash("error", "Player you want to delete is NOT FOUND!");
res.redirect("back");
return;
}
foundPlayer.remove(function(err, removedPlayer) {
if(!err) {
console.log(removedPlayer); // prints null
}
}); // <<<<<<<<<<<
res.redirect("back");
});
});
然后我在以下代碼中使用model.findByIdAndRemove() ,它工作。
// Delete - delete a player and update the team
router.delete("/:player_id", function(req, res) {
Player.findByIdAndRemove(req.params.player_id, function(err, foundPlayer) {
if(err) {
console.log(err);
req.flash("error", "Player you want to delete is NOT FOUND!");
res.redirect("back");
return;
}
res.redirect("back");
});
});
我有兩個架構:
var TeamSchema = new mongoose.Schema({
name: String,
players: [
{
type: mongoose.Schema.ObjectId,
ref: "Player"
}
],
});
var PlayerSchema = new mongoose.Schema({
name: String,
team: {
type: mongoose.Schema.Types.ObjectId,
ref: "Team"
}
});
非常感謝您!
remove() 已被棄用,試試這個
Player.deleteOne(req.params.player_id,function(err, removedPlayer) {
if(!err) {
console.log(removedPlayer); // prints null
}
}); // <<<<<<<<<<<
您已經在 findByID 返回的findByID
上使用了.remove()
。 您應該直接在您嘗試從中刪除文檔的 model 上使用刪除。 例如。 以下將起作用 -
Player.remove({_id:req.params.player_id},function(err, foundPlayer){
if(!err)
console.log(foundPlayer);
});
如果找到了具有給定_id
的玩家,您將在控制台上記錄一些內容,如下所示 -
deleted
{ n: 1, ok: 1, deletedCount: 1 }
嘗試使用remove()
可能會給你一個警告說 -
DeprecationWarning: collection.remove is deprecated. Use deleteOne, deleteMany, or bulkWrite instead.
因此,您必須根據您的要求使用 deleteOne 或 deleteMany 。 所以你的代碼應該是這樣的 -
Player.deleteOne({_id:req.params.player_id},function(err, foundPlayer){
if(!err)
console.log(foundPlayer);
});
如果您想使用foundPlayer
本身在回調中使用,您也可以選擇使用以下內容 -
findOneAndDelete()
/ findByIdAndDelete()
:查找匹配的文檔,將其刪除,將找到的文檔(如果有)傳遞給回調。 如果回調通過則立即執行,否則返回查詢 object。希望這可以幫助 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.