我在这里使用nodejs,express,mongodb和mongoose! 碰巧我试图删除“关注者”文档中的某些ID ...
这是模型的一部分(我只是复制这部分,因为它是我感兴趣的部分):
var UserSchema = new mongoose.Schema({
followers: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
})
我正在尝试使用以下代码删除:
try{
let user = await User.findById(req.params.id);
user.followers.remove({_id: ObjectId(req.user._id)});
user.save();
}
catch(err) {
res.redirect('back');
}
req.user._id是我要从“关注者”中删除的用户的ID, 但是,无论何时执行此操作,页面都只会继续加载,并且什么也不会发生。=我要删除的关注者并未被删除。有人可以帮我吗?
答案 0 :(得分:0)
You can delete
documents within an Array by using $pull
In single Query
Query :
db.getCollection('users')
.update({ "_id": ObjectId("5bb4747f316fcf310f3ef0a4") },
{ $pull: { followers: { _id: ObjectId('5bb4747f316fcf310f3ef0a5') } } },
{ multi: true })
Tested on
Mongo GUI
.
Test on below doc
{
"_id" : ObjectId("5bb4747f316fcf310f3ef0a4"),
"index" : "123456",
"followers" : [
{
"_id" : ObjectId("5bb4747f316fcf310f3ef0a6"),
"name" : "green"
},
{
"_id" : ObjectId("5bb4747f316fcf310f3ef0a5"),
"name" : "green"
}
]
}
答案 1 :(得分:0)
好的,所以我发现了问题: 在添加此“ {_id:ObjectId(req.user._id)}”之后,看起来实际上已删除了关注者...该页面没有停止加载,因为我忘记在user.save之后放一个res.redirect。 )! = D 这是我修复后的代码:
try{
let user = await User.findById(req.params.id);
user.followers.remove({_id: ObjectId(req.user._id)});
user.save();
req.flash('success','Successfully unfollowed '+user.username +"!");
res.redirect('/users/'+ req.params.id);
}
catch(err) {
req.flash('error', err.message);
res.redirect('back');
}
答案 2 :(得分:0)
您可以使用:
A.findByIdAndRemove(id, options, callback) // executes
A.findByIdAndRemove(id, options) // return Query
A.findByIdAndRemove(id, callback) // executes
A.findByIdAndRemove(id) // returns Query
A.findByIdAndRemove()
例如01:
Example.findByIdAndRemove(example._id, function(err, foundExample) {
console.log("you removed" + foundExample);
})
例如02:
Example.findByIdAndRemove({_id: numberOfId}, function(err) {
if(!err){
console.log("successfully removed")
})
})
例如03:
Example.findByIdAndRemove({_id: numberOfId}, async function(err) {
if(!err){
await console.log("successfully removed");
})
})