我在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':类型},{ '$推':{ '$考试题':{ '问题':questionsId, '答案':答案}}} ,选项,功能(ERR,REF){
if(错误){
console.log('将问题添加到Exam'.red,错误);
回调(错误,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)
我尝试了这些方法,但这些方法都不起作用
答案 0 :(得分:0)
在下一个修饰符中使用 $
运算符:
{'$pull': {'exam.$.questions': questionId}
您必须先在查询中使用 $elemMatch:
运算符:
{'_id': pid, exam: { $elemMatch: {type: type} } }
答案 1 :(得分:-2)
其他人可能会提供mongo语法答案。
我喜欢的流星的一个方面是你到处都可以使用javascript / coffeescript。我谦卑地建议你将这个策略扩展到你使用mongo更新。我发现自己只是直接使用我的json /对象操作能力而且$设置整个事情,而不是学习另一种语法。有人会说,限制你检索的字段是不成熟的优化,直到证明它会产生影响,所以你可能无论如何都要检索数据。