【发布时间】:2020-08-05 07:58:51
【问题描述】:
我是 mongoDB 的新手。我有两个集合 user 和 answer。 我需要统计每个问题的答案,并得到其中的百分比。答案集中总是只给出 3 个答案。
用户收藏
{
_id : user1,
questionId : 100,
mail: "abc@gmail.com"
},
{
_id : user2,
questionId : 400,
mail: "xyz@gmail.com"
}
答案集合
{ _id: 1, userId : user1, answer1: "ok", answer2: "bad", answer3: "great"},
{ _id: 2, userId : user1, answer1: "ok", answer2: "ok", answer3: "bad" },
{ _id: 3, userId : user2, answer1: "ok", answer2: "Not good",answer3: "great"},
{ _id: 4, userId : user2, answer1: "ok", answer2: "bad", answer3: "great"},
{ _id: 5, userId : user2, answer1: "ok", answer2: "bad", answer3: "bad" }
答案字段 answer1、answer2 和 answr3 可以具有不同或相同的值。根据这些值,我必须计算答案并在这 3 个答案中取百分比。
预期结果
[{
_id:1,
userId : user1,
mail: "abc@gmail.com",
ans:[
{answer1 :[{"ok":2, percentage:100}]},
{answer2 :[{"bad":1, percentage: 50},{"ok":1,percentage: 50}]},
{answer3 :[{"great":1, percentage: 50},{"bad":1,percentage: 50}]}
]
},
{
_id:1,
userId : user2,
mail: "xyz@gmail.com",
ans:[
{answer1 :[{"ok":3, percentage:100}]},
{answer2 :[{"Not good":1, percentage: 33},{"bad":2,percentage: 66}]},
{answer3 :[{"great":2, percentage: 66},{"bad":1,percentage: 33}]}
]
}]
我尝试如下,
[{
$lookup: {
from: 'answer',
localField: '_id',
foreignField: 'userId',
as: 'join'
}
}, {
$unwind: {
path: '$join',
preserveNullAndEmptyArrays: true
}
}, {
$group: {
_id: '$_id',
answers: {
$push: {
A1: {
ans: "$join.answer1"
},
A2: {
ans: "$join.answer2"
},
A3: {
ans: "$join.answer3"
}
}
}
}
}, {
$unwind: {
path: '$answers',
preserveNullAndEmptyArrays: true
}
}, {
$group: {
_id: {
_id: '$_id',
Q1: '$answers.Q1.ans'
},
count: {
$sum: 1
}
}
}
///...
}]
我不知道如何继续
【问题讨论】:
-
每个问题你应该有 3 个可能的答案:好的、不好的、好的;这是一个现实的限制,还是您需要能够处理随机答案?
-
必须处理随机答案
标签: mongodb mongodb-query aggregation-framework