这种情况下的Mongodb数据模式

时间:2013-09-17 17:38:05

标签: mongodb mongodb-query

我正在为我的一个项目测试mongodb。

基本上我想输入一些学生的考试成绩。所以使用mongodb,我开始使用

db.grades.insert( {_id: 1024} );    // this references the student's SSN
db.grades.update( {_id: 1024}, { $push: { SemesterAssessment: 43 }} );    //insert student grades
db.grades.update( {_id: 1024}, { $push: { SemesterAssessment: 50 }} );  // teacher allows retaking

Output
{"SemesterAssessment : [43, 50], "_id": 1024};

我想在SemesterAssessment中添加一个标记,以指示哪个等级反映了最新的测试结果。

我正在寻找以下示例输出:

Sample output
{"SemesterAssessment : [43, [latest: 50]], "_id": 1024}

这包括名为“最新”的密钥。但我不知道如何在mongodb中实现这一点。任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

使用push它总是在列表末尾添加元素并找到可以使用的列表的最新元素:

db.collection.find( { field: value }, { array: {$slice: count } } );
e.g    db.collection.find({},{arr:{$slice:-1}})

答案 1 :(得分:0)

{"SemesterAssessment" : [43, ["latest": 50]], "_id": 1024}

json是无效的,你需要这样的东西:

({"SemesterAssessment" : [43, 50], "latest": 50}, "_id": 1024}

然后你的代码就变成了这个:

db.grades.insert( {_id: 1024} );
db.grades.update( {_id: 1024}, { $push: { SemesterAssessment: 43 }, 
    $set: { latest: 43 }});
db.grades.update( {_id: 1024}, { $push: { SemesterAssessment: 50 }, 
    $set: { latest: 50 }});