2016-08-17 2 views
0

В моей коллекции есть документы, как этотОшибка выполнения MongoDB запроса с cursor.min со встроенными документами

{ "_id" : 112, "name" : "Myrtle Wolfinger", "scores" : [ { "type" : "exam", "score" : 73.93895528856032 }, { "type" : "quiz", "score" : 35.99397009906073 }, { "type" : "homework", "score" : 93.85826506506328 }, { "type" : "homework", "score" : 71.21962876453497 } ] } 

Я хочу найти для каждого документа мин поля scores.score где score.type = "homework".

Я выполнил запрос, как этого

db.students.find({},{"scores.score":1}).min({ "scores.type":"homework" }) 

возвращает Монго оболочки эту ошибку

error: { 
    "$err" : "Unable to execute query: error processing query: ns=school.students limit=0 skip=0\nTree: $and\nSort: {}\nProj: { scores.score: 1.0 }\n planner returned error: unable to find relevant index for max/min query", 
    "code" : 17007 
} 
+0

мин. Требуется указатель. Показать индексы коллекции»угождать – chf

+0

db.students.getIndexes() возвращают этот ответ: – provola

+0

[ { "V": 1, "ключ" : { "_id": 1 }, "имя" :" _id_ ", " ns ":" school.students " } ] – provola

ответ

0

Вы бы не использовать найти() с мин() для этого. min() будет просто ограничивать ваши результаты теми, что выше нижней границы, используя индекс. Вместо этого попробуйте использовать aggregate().

db.students.aggregate([ 
    { 
     $unwind:"$scores" 
    }, 
    { 
     $match: {"scores.type":"homework"} 
    }, 
    { 
     $group:{ 
      _id: { 
       _id:"$_id", 
       name: "$name" 
      }, 
      min_score: {$min: "$scores.score"} 
     } 
    } 
]); 
Смежные вопросы