2013-08-30 59 views
0

我有一個用mongoose實現的mongodb測試模式。如何更新(刪除)嵌套數組中的文檔

var TestSchema = new mongoose.Schema({ exam:[ Exam ] }); 

var ExamSchema = mongoose.Schema({type:String, questions: [ { question:{ type: ObjectId, ref: 'Question' }, answer:String } ] }); 

var QuestionSchema = mongoose.Schema({ desciption:String, solution:String }); 

測試的想法,是一個學生可能會參加一些考試的測試,每次考試都有一個類型名稱(可以是數學或物理)和問題的列表OBJECTID以及相應的回答充滿由學生。

此代碼可以幫助在測試中添加新的問題和答案 TestModel.update({'_ id':pid,'exam.type':type},{'$ push':{'exam (問題):questionsId,'answer':answer}}},options,function(err,ref){if(err){ ,ERR); 回調(ERR,NULL);} 其他{ 的console.log(「添加問題Exam'.green + REF);
回調(NULL,REF);} } ) 它的工作原理以及通過添加,但刪除問題和答案,更新不起作用。

Model.update({'_id':pid,'exam.type':type},{'$pull':{'exam.$.questions':questionId}},options,function(err,ref) 

Model.update({'_id':pid,'exam.type':type},{'$pull':{'exam.$.questions.question':questionId}},options,function(err,ref) 

Model.update({'_id':pid,'exam.type':type,'exam.questions.question':questionId},{'$pull':{'exam.$.questions.$.question':questionId}},options,function(err,ref) 

Model.update({'_id':pid,'exam.type':type,'exam.questions.question':questionId},{'$pull':{'exam.questions.$.question':questionId}},options,function(err,ref) 

我嘗試了這些方法,但這些工作

回答

-2

的有一個蒙戈語法回答別人可以提供。

我喜歡的流星的一個方面是你可以隨處使用javascript/coffeescript。我虛心地建議你把這個策略擴展到你使用mongo更新。我發現自己直接使用我的json/object操作能力,$設置了整個事情,而不是學習另一種語法。有人會說,限制你檢索的字段是不成熟的優化,直到證明它會有效果,所以你可能無論如何檢索數據。

0

在未來修改使用$操作:

{'$pull': {'exam.$.questions': questionId} 

您必須在第一次使用$elemMatch:運營商在查詢:

{'_id': pid, exam: { $elemMatch: {type: type} } }