Документ выглядит так:
{
"_id" : ObjectId("361de42f1938e89b179dda42"),
"user_id" : "u1",
"evaluator_id" : "e1",
"candidate_id" : ObjectId("54f65356294160421ead3ca1"),
"OVERALL_SCORE" : 150,
"SCORES" : [
{ "NAME" : "asd", "OBTAINED_SCORE" : 30}, { "NAME" : "acd", "OBTAINED_SCORE" : 36}
]
}
Функция агрегации:
db.coll.aggregate([ {$unwind:"$SCORES"}, {$group : { _id : { user_id : "$user_id", evaluator_id : "$evaluator_id"}, AVG_SCORE : { $avg : "$SCORES.OBTAINED_SCORE" }}} ])
Предположим, есть два документа с одним и тем же "user_id" (скажем, u1) и разным "evaluator_id" (скажем, e1 и e2).
Например:
1) Среднее будет работать так ((30 + 20)/2 = 25). Это работает для меня.
2) Но для документа {evaluator_id: "e1"} оценка равна 30, для документа { "NAME" : "asd"} и {evaluator_id: "e2"} оценка равна 0< /strong> для { "ИМЯ" : "asd" }. В этом случае я хочу, чтобы AVG_SCORE был только 30 (не (30 + 0)/2 = 15).
Возможно ли это через агрегацию??
Может ли кто-нибудь помочь мне.