2016-06-07 73 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

是的,沒有理由這樣做,它可能會慢很多。 (如果答案有幫助,請將答案標記爲正確答案!:)) –