2015-11-25 42 views
-3

我有一個以下數據的集合:刪除子文件中的NodeJS與MongoDB的

{ 
     "__v": NumberInt(0), 
     "_id": ObjectId("565443b1172e19d51f98b0ed"), 
     "address": "tohana", 
     "comments": [ 
     { 
      "_id": ObjectId("5654455fe088d89c20736e3c"), 
      "comment": "good man", 
      "uemail": "[email protected]", 
      "uname": "dinesh" 
     }, 
     { 
      "_id": ObjectId("565445e471dce6ca20705a84"), 
      "comment": "nice person", 
      "uemail": "[email protected]", 
      "uname": "krishan" 
     }, 
     { 
      "_id": ObjectId("5654460e7aa73bec2064060e"), 
      "comment": "bad person", 
      "uemail": "Rai", 
      "uname": "Rahul" 
     } 
     ], 
     "email": "[email protected]"▼, 
     "name": "Nishant" 
    } 

任何人都可以提出如何從「意見」鍵只有子文檔的ID刪除子文檔,我要去德爾? 例如,我想刪除一個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) } 
     } 
    }); 
}); 

但這並不刪除數據。

+0

上面提到的JSON是Post請求體?你使用貓鼬包裝的MongoDB? –

+0

我正在使用貓鼬 – Karan

+0

好吧。完善。首先,您必須使用id(文檔ID不是評論ID)獲取完整文檔,然後從返回文檔中移除評論,就像您可以使用lodash或下劃線來查找和刪除評論數組中的評論。之後再次保存/更新新的更新文件。合理? –

回答

0
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}); 
    }); 
})