2016-06-07 52 views
0

我使用下面的JavaScript程序应该FING得分最低,并从集合中删除它寻找得分最低MongoDB中

var types=['exam','homework','quiz'] 
for (student_id = 0; student_id < 800; student_id++){ 
    for(type = 0; type < 3; type++){ 
     var r = {'student_id':student_id, 'type':types[type], 'minscore':{'$min':'$scores'}}; 
     db.scores.remove(r); 
    } 
} 

我得到的错误:

WriteResult({ 
     "nRemoved" : 0, 
     "writeError" : { 
       "code" : 2, 
       "errmsg" : "unknown operator: $min" 
     } 
+0

为什么不是'sort()'和'limit()'。 'db.getCollection( '学生')找到({})排序({分数:1})。限制(1)'? –

+0

如果你想要文档中字段的最小值,那么你需要在$ group阶段或$ project阶段(如果你的mongo版本具有$ project阶段)汇总和使用$ min操作符。 – ODelibalta

回答

3

这是原始mongo查询,将得到你想要的。一条线。

db.scores.find({'student_id':student_id, 'type':types[type]}).sort({scores: 1}).limit(1);

记住要确保有一个与所有查询的字段的索引让您得到最佳的速度。

+0

所以我不再使用迭代 –

+1

是的,没有理由这样做,它可能会慢很多。 (如果答案有帮助,请将答案标记为正确答案!:)) –