0

MongoDB新手在这里...

所以,我试图在一个看起来像这样的集合中打印出最小值分数......

        > db.students.find({'_id': 1}).pretty()
        {
                "_id" : 1,
                "name" : "Aurelia Menendez",
                "scores" : [
                        {
                                "type" : "exam",
                                "score" : 60.06045071030959
                        },
                        {
                                "type" : "quiz",
                                "score" : 52.79790691903873
                        },
                        {
                                "type" : "homework",
                                "score" : 71.76133439165544
                        },
                        {
                                "type" : "homework",
                                "score" : 34.85718117893772
                        }
                ]
        }

我使用的咒语是这样的......

db.students.aggregate(
    // Initial document match (uses index, if a suitable one is available)
    { $match: {
        _id : 1
    }},

    // Expand the scores array into a stream of documents
    { $unwind: '$scores' },

    // Filter to 'homework' scores 
    { $match: {
        'scores.type': 'homework'
    }},

    // grab the minimum value score
    { $match: {
        'scores.min.score': 1
    }}
)

我得到的输出是这个......

{ "result" : [ ], "ok" : 1 }

我究竟做错了什么?

4

2 回答 2

0

您的想法是正确的,但是在聚合的最后一步中,您要做的是按学生对所有分数进行分组并找到 $min 值。

将最后一个管道操作更改为:

{ $group: {
        _id: "$_id",
        minScore: {$min: "$scores.score"}
    }}
于 2012-11-20T00:10:47.947 回答
0
> db.students.aggregate(     
{ $unwind:  "$scores" },`
{ $match:{"scores.type":"homework"} }, 
{ $group: { 
    _id : "$_id", 
   maxScore : { $max : "$scores.score"}, 
   minScore: { $min:"$scores.score"} 
  }
});

如何聚合MongoDB中集合中的每个项目

于 2012-11-21T00:01:17.430 回答