2016-10-31 12 views
0

質問は3つ以上の強さを持つユーザーの平均年齢を計算します。mongo dbクエリの関数を集計する方法は?

データの一つは、このようなものです:

{ 
    "_id" : 1.0, 
    "user_id" : "jshaw0", 
    "first_name" : "Judy", 
    "last_name" : "Shaw", 
    "email" : "[email protected]", 
    "age" : 39.0, 
    "status" : "disabled", 
    "join_date" : "2016-09-05", 
    "last_login_date" : "2016-09-30 23:59:36 -0400", 
    "address" : { 
     "city" : "Deskle", 
     "province" : "PEI" 
    }, 
    "strengths" : [ 
     "star schema", 
     "dw planning", 
     "sql", 
     "mongo queries" 
    ], 
    "courses" : [ 
     { 
      "code" : "CSIS2300", 
      "total_questions" : 118.0, 
      "correct_answers" : 107.0, 
      "incorect_answers" : 11.0 
     }, 
     { 
      "code" : "CSIS3300", 
      "total_questions" : 101.0, 
      "correct_answers" : 34.0, 
      "incorect_answers" : 67.0 
     } 
    ] 
} 

私はこのデータが持っているどのように多くの長所数え、その後、$gtに設定し、その後、平均年齢を計算する必要があります知っています。 しかし、私はどのように1つのクエリでカウントと平均2関数を書くか分からない。集約を使用する必要がある場合は、どのように集約を使用する必要がありますか?

平均値を計算するために、あなたの配列サイズ& $groupに合わせて、本当にありがとうございました

答えて

0

使用$redact

db.collection.aggregate([{ 
    "$redact": { 
     "$cond": [ 
      { "$gt": [{ "$size": "$strengths" }, 3] }, 
      "$$KEEP", 
      "$$PRUNE" 
     ] 
    } 
}, { 
    $group: { 
     _id: 1, 
     average: { $avg: "$age" } 
    } 
}]) 

$redact一部が3よりstrenghs配列以上の大きさに合わせ、それは$$KEEP記録という意志そうでなければこの条件に一致してください$$PRUNE一致しないレコード。 $redact documentation

$groupはちょうどあなたが平均年齢を計算するために最後に、配列のサイズとグループの試合でプロジェクトを使用することができます$avg

0

で平均を実行し確認してください。

db.averageAge.aggregate([{ 
    $project: { 
     age: 1, 
     count: { 
      $size: "$strengths" 
     } 
    } 
}, { 
    $match: { 
     count: { 
      $gt: 3 
     } 
    } 
}, { 
    $group: { 
     _id: 1, 
     averageAge: { 
      $avg: "$age" 
     } 
    } 
}])