2015-04-08 61 views
0

我有一個JSON格式如下:貓鼬 - 刪除數組元素的更新

{ 
    _id:5522ff94a1863450179abd33, 
    userName:'bill', 
    __v:3, 
    friends:[ 
     { 
     _id:55156119ec0b97ec217d8197, 
     firstName:'John', 
     lastName:'Doe', 
     username:'johnDoe' 
     }, 
     { 
     _id:5515ce05207842d412c07e03, 
     lastName:'Adam', 
     firstName:'Foo', 
     username:'adamFoo' 
     } 
    ] 
} 

而且我想刪除整個相應子陣。比如我想刪除用戶李四與ID 55156119ec0b97ec217d8197這樣的結果將是:

{ 
    _id:5522ff94a1863450179abd33, 
    userName:'bill', 
    __v:3, 
    friends:[ 
     { 
     _id:5515ce05207842d412c07e03, 
     lastName:'Adam', 
     firstName:'Foo', 
     username:'adamFoo' 
     } 
    ] 
} 

到目前爲止,我有這樣的:

exports.delete = function (req, res) { 
    var friends = req.friends[0]; 

    friends.update(
     {'_id': req.body.friendsId}, 
     {$pull: {'friends.friends': {_id: req.body.friendId}}}, function (err) { 
      if (err) { 
       return res.status(400).send({ 
        message: getErrorMessage(err) 
       }); 
      } else { 
       res.json(friends); 
      } 
     }); 
}; 

但是沒有結果,也我沒有得到任何錯誤,它會保持與以前一樣。 req.body.friendsId是主陣列的ID,req.body.friendId是我想要拉的特定用戶的ID。

回答

1

更改您的更新查詢到這一點:

exports.delete = function (req, res) { 
    var friends = req.friends[0]; // assuming the friends object is your mongodb collection 

    friends.update(
     { '_id': req.body.friendsId }, 
     { $pull: {'friends': { _id: req.body.friendId } } }, function (err) { 
      if (err) { 
       return res.status(400).send({ 
        message: getErrorMessage(err) 
       }); 
      } else { 
       res.json(friends); 
      } 
     }); 
}; 

這將搜索這些都是朋友數組元素_id值= req.body.friendsId和使用$pull運算符刪除數組中特定的數組元素的文檔。

+2

非常感謝,問題出在朋友對象 –