我必须使用索引值删除第二条评论。以下是我的文档结构
{
"_id" : ObjectId("000000000fea5f24282e715b"),
"file_name" : "resume_of_ganga_.docx",
"created_date" : ISODate("2017-11-28T10:29:10.373Z"),
"updated_date" : ISODate("2017-11-28T12:39:32.148Z"),
"comments" : [
{
"created_date" : ISODate("2017-11-28T13:23:51.472Z"),
"status" : "N",
"comment_text" : "Yes...",
"username" : "name"
},
{
"created_date" : ISODate("2017-11-28T13:24:15.938Z"),
"status" : "N",
"comment_text" : "asdsd",
"username" : "name"
}
]
}
我使用以下mongoose查询。但我的评论不会被删除
mongo.filemanager.findOneAndUpdate({ "_id": req.body.id},{$pull : {"'comments.' +req.body.c_index" : 1 }},function(err,response){
console.log("Deleted")
});
例如我将索引值设为2 ..它应该删除第二条评论......
先谢谢
答案 0 :(得分:1)
我试着查看MongoDB是否有这样的功能,但似乎他们不是我发现的。
解决方法可能是这样的。不确定这是否可以被视为原子操作。
const removeCommentAtIndex = (index) => {
mongo.filemanager.findById(req.body.id, (err, file) => {
file.comments.splice(index, 1);
file.save();
})
}
我在测试数据库中执行了In mongoDb, how do you remove an array element by its index的已接受答案, IT WORKS
mongo.filemanager.findOneAndUpdate({}, {"$unset" : {"comments.1" : 1 }})
mongo.filemanager.findOneAndUpdate({}, {"$pull" : {"comments" : null}})
请注意,req.body.c_index
需要1
才能删除第二条评论。