使用mongodb删除nodejs中的子文档

Posted

技术标签:

【中文标题】使用mongodb删除nodejs中的子文档【英文标题】:Delete sub document in nodejs with mongodb 【发布时间】:2016-02-28 04:00:20 【问题描述】:

我有一个包含以下数据的集合:


       "__v": NumberInt(0),
       "_id": ObjectId("565443b1172e19d51f98b0ed"),
       "address": "tohana",
       "comments": [
         
           "_id": ObjectId("5654455fe088d89c20736e3c"),
           "comment": "good man",
           "uemail": "dinesh@gmail.com",
           "uname": "dinesh" 
        ,
         
           "_id": ObjectId("565445e471dce6ca20705a84"),
           "comment": "nice person",
           "uemail": "kr@gmail.com",
           "uname": "krishan" 
        ,
         
           "_id": ObjectId("5654460e7aa73bec2064060e"),
           "comment": "bad person",
           "uemail": "Rai",
           "uname": "Rahul" 
         
      ],
       "email": "nishantg@ocodewire.com"▼,
       "name": "Nishant" 
    

谁能建议如何从只有子文档 id 的“cmets”键中删除子文档,我要删除吗? 例如我想删除一个id为5654455fe088d89c20736e3c的子文档,所以这个子文档应该被删除。

这是我正在使用的代码:

var Users = require("../app/models/users"); //userModel

app.post('/deleteComment/:id', function(req, res) 
    var input = JSON.parse(JSON.stringify(req.body));
    var id = req.params.id;//commentId
    var userId = input.id;//userId

    Users.findByIdAndUpdate(userId, 
      '$pull': 
        'comments': '_id': new ObjectId(someStringValue) 
       
    );
);

但这不会删除数据。

【问题讨论】:

上面提到的JSON是一个Post请求体?你在为 mongodb 使用 mongoose 包装器吗? 好的。完美的。首先,您必须获取带有 id 的完整文档(文档 id 不是评论 id),然后从返回文档中删除评论,就像您可以使用 lodash 或下划线从评论数组中查找和删除该评论一样。再次执行此操作后,保存/更新新的更新文档。有意义吗? 【参考方案1】:
app.post('/deleteComment/:id', function(req, res) 
var input = JSON.parse(JSON.stringify(req.body));
var id = req.params.id;
var userId = input.uid;
 Users.findOneAndUpdate(
        _id: userId, 
        $pull: comments: _id: id,
        function(err, data)
           if(err) return err;
           res.send(data:data);
    );
)

【讨论】:

以上是关于使用mongodb删除nodejs中的子文档的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Mongo DB 中的子文档数组中删除匹配条件的子文档

将查询构建器条件转换为 MongoDB 操作,包括嵌套的子文档数组

使用 findOne 更新 mongoDB 文档中的子字段并保存

如何使用python脚本从mongoDB中检索数组中的子文档

如何使用python脚本从mongoDB中检索数组中的子文档

如何使用 C# 驱动程序更新 MongoDB 数组中的子文档