我有一个具有以下结构的集合(我将发布一个到playground的链接,因为它相当大):
https://mongoplayground.net/p/WNga0mze0WS
只是一个简短的说明,我们正在寻找materias
(主题)和assuntos
(主题),我们希望聚合返回一个nomes
数组(该主题的名称)的erros
(错误)是acertos
(正确)的3倍或更多,以便我们可以显示学生需要改进的主题。其他结果无关紧要,只有当它是3倍或更多。
我想做一个集合,将user.uid
分组,因为在这个集合上,你可以有来自另一个用户的结果,并尝试根据主题名称(assuntos.nome
)添加所有错误和正确答案。
到目前为止,我已经尝试了很多东西,但这是我最后尝试的东西:
db.aggregate([
{ $unwind: "$materias" },
{ $unwind: "$materias.assuntos" },
{
$group: {
_id: {
_id: "$user.uid",
nome: "$materias.assuntos.nome",
total: "$materias.assuntos.total",
acertos: "$materias.assuntos.acertos",
erros: "$materias.assuntos.erros",
// sumErro: {
// $sum: {
// "$toInt": "$materias.assuntos.erros"
// }
// },
teste: {
// $sum: {
"$cond": {
"if": {
"$and": [
{
"$gte": [
"$materias.assuntos.erros", 3
]
},
{
"$gte": [
"$materias.assuntos.erros",
{ $multiply: [ "$materias.assuntos.acertos", 3 ] }
]
}
]
},
"then": "$materias.assuntos.erros",
"else": "$$REMOVE",
}
// }
}
},
},
},
{
$group: {
_id: {
_id: "$_id._id",
nome: "$_id.nome",
erros: "$_id.erros",
teste: "$_id.teste"
},
}
}
])
字符串
我也试过只按uid和materias.assuntos.nome分组,然后再分组以获得结果,但没有成功。我在那里做的条件是我要找的是erros比acertos多3倍,我想erros也需要3或更多。
我期望一个结果至少有3个以上的错误,但我做错了,因为它没有根据主题的名称添加这些值。
我也可以提供另一个文件,如果需要的话,因为我发送的只有一个主题,有3倍以上的错误比acertos。
任何帮助将不胜感激
1条答案
按热度按时间yptwkmov1#
我在操场上找到了一个解决办法
字符串