2016-08-17 5 views
0

In meiner Sammlung Ausführung gibt es Dokumente wie dieseFehler eine mongodb Abfrage mit cursor.min mit eingebetteten Dokumente

{ "_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 } ] } 

ich für jedes Dokument die min des Feldes scores.score wo score.type = "homework" finden möchten.

ausgeführt ich eine Abfrage wie folgt diesen Fehler

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

Mongo Shell kehrt würde

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

min benötigen einen Index. Zeigen Sie Ihre Sammlung‘Indizes – chf

+0

db.students.getIndexes bitte() geben diese Antwort: – provola

+0

[ { "v": 1, "Schlüssel": { "_id": 1 }, "name":" _id_ ", " ns ":" school.students " } ] – provola

Antwort

0

Sie nicht mit min() für diese finden() verwenden. min() würde Ihre Ergebnisse einfach auf diejenigen oberhalb einer unteren Grenze begrenzen, indem Sie einen Index verwenden. Versuchen Sie stattdessen, aggregate() zu verwenden.

db.students.aggregate([ 
    { 
     $unwind:"$scores" 
    }, 
    { 
     $match: {"scores.type":"homework"} 
    }, 
    { 
     $group:{ 
      _id: { 
       _id:"$_id", 
       name: "$name" 
      }, 
      min_score: {$min: "$scores.score"} 
     } 
    } 
]); 
Verwandte Themen