0

私はmongodbに次のコレクションを持っています。

{ "_id" : ObjectId("519a35ee8f2ceda43f42add5"), "articulo" : "Sobre mongodb", "autor" : "xxxx1", "calificacion" : 3 }
{ "_id" : ObjectId("519a360b8f2ceda43f42add6"), "articulo" : "Aggregation framework", "autor" : "xxxx1", "calificacion" : 5 }
{ "_id" : ObjectId("519a361b8f2ceda43f42add7"), "articulo" : "Sobre journal", "autor" : "xxxx2", "calificacion" : 4 }
{ "_id" : ObjectId("519a362e8f2ceda43f42add8"), "articulo" : "Manipulando datos", "autor" : "xxxx1", "calificacion" : 2 }
{ "_id" : ObjectId("519a36418f2ceda43f42add9"), "articulo" : "MongoDB for dba", "autor" : "xxxx2", "calificacion" : 5 }
{ "_id" : ObjectId("519a4aa18f2ceda43f42adda"), "articulo" : "ejemplo2", "autor" : "xxxx1", "calificacion" : 5 }

著者(著者)ごとの最大評点(カリフィカシオン)の記事(アーティキュロス)の数を数えたいと思います。

xxxx1 にはグレード 5 の記事が 2 件あります xxxx2 にはグレード 5 の記事が 1 件あります

(最大グレードはわかりません)

私はこれを試しました:

db.ejemplo.aggregate([
    {$group:{_id: "$autor" , calificacion:{$max:"$calificacion" }}} 
])

しかし、私は最大グレードの著者しか取得しません。Aggregation Frameworkでそれを行うことはできますか?

4

1 に答える 1

2

次のような集計操作を試すことができます。

db.ejemplo.aggregate([
    { $group : { _id : { autor : "$autor",
                         calificacion : "$calificacion" },
                 articulos : { $sum : 1 },
    }},
    { $sort : { "_id.calificacion" : -1 }},
    { $group : { _id : "$_id.autor",
                 calificacion : { $first : "$_id.calificacion" },
                 articulos : { $first : "$articulos" },
    }}
])

結果は次のようになります。

{
    "result" : [
        {
            "_id" : "xxxx1",
            "calificacion" : 5,
            "articulos" : 2
        },
        {
            "_id" : "xxxx2",
            "calificacion" : 5,
            "articulos" : 1
        }
    ],
    "ok" : 1
}

ありがとう、リンダ

于 2013-05-21T06:28:33.670 に答える