错误执行与cursor.min一个MongoDB的查询与嵌入文档
问题描述:
在我收藏有文件这样错误执行与cursor.min一个MongoDB的查询与嵌入文档
{ "_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
}
答
您不会使用查找()与MIN()这一点。 min()将使用索引将结果简单地限制为高于下限的结果。而是尝试使用aggregate()。
db.students.aggregate([
{
$unwind:"$scores"
},
{
$match: {"scores.type":"homework"}
},
{
$group:{
_id: {
_id:"$_id",
name: "$name"
},
min_score: {$min: "$scores.score"}
}
}
]);
分钟需要的指标。显示您的收藏”索引请 – chf
db.students.getIndexes()返回此响应: – provola
[ { “V”:1, “关键”:{ “_id”:1 }, “名”:“ _id_”, “NS”: “school.students” } ] – provola