使用mongoose使用索引值删除数组内的注释

时间:2017-12-01 07:25:02

标签: node.js mongoose

我必须使用索引值删除第二条评论。以下是我的文档结构

{
    "_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 ..它应该删除第二条评论......

先谢谢

1 个答案:

答案 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才能删除第二条评论。