เอกสารมีลักษณะดังนี้:
{
"_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> สำหรับ { "NAME" : "asd" } ในกรณีนี้ ฉันต้องการให้ AVG_SCORE เป็น 30 เท่านั้น (ไม่ใช่ (30 + 0) / 2 = 15)
เป็นไปได้ไหมโดยการรวมกลุ่ม??
ใครก็ได้ช่วยฉันหน่อย