从mongoose

时间:2015-11-20 11:18:47

标签: node.js mongodb mongoose

问题在于,我无法使用下一个模式从对象中删除附件(.mongoose)。



var question=mongoose.Schema({
   _id:mongoose.Schema.Types.ObjectId
   answers:[{
     _id:mongoose.Schema.Types.ObjectId
     attachments:[
      _id:mongoose.Schema.Types.ObjectId
     ]
   }]
});




我尝试使用下一个代码从文档中删除附件。



Question.update({ 
  _id: req.params.idQuestion, 
  'answers._id': req.params.idAnswer 
}, { 
  $pull: { 
    'answers.$.attachments':{_id:req.params.idAttachment}
  } 
}, function (err, updated) {
  if(err){
    return res.status(400).send(err);
  }
  else if(!updated.nModified){
    return res.status(400).send('Question hasn\t been updated.');
  }
  
  res.send(200);
  
});




我认为我的查询不正确并试图在mongo shell中执行此操作。它运作得很好。



db.questions.update({
  _id:ObjectId('xx'),
  'answers._id':ObjectId('yy')
},{
  $pull:{
    'answers.$.attachments':{_id:ObjectId('zz')}
  }
})




有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

var qid=req.params.idQuestion,
    aid=req.params.idAnswer;
//find
Question.find({ 
  _id: qid, 
  'answers._id': aid 
},{
   answers:1
},function(err,question){
   //change
   var answers=question.answers.filter(function(el){
          return el._id!=aid;
       });
   //update
   Question.update({
      _id: qid, 
   },{$set:{
      answers:answers
   }},function(err,updated){
      ...//your callback here
   });
});