gpt4 book ai didi

node.js - 如何对 MongoDB 中数组内的字段值进行分组?

转载 作者:行者123 更新时间:2023-12-04 14:53:30 25 4
gpt4 key购买 nike

我有一个使用 MongoDB 的学生评分系统。我在 MongoDB 中有以下文档:

如何获取特定科目成绩“A”、“B”、“C”、“D”的学生人数。每个主题的“_id”保持不变。

{
_id: "60b223541338467beaf3ae0d",
studentName: "John Doe"
studentGradingDetails: [
{
_id: "60b21e47e5462929cab27a98",
term: "semester-1",
subject: "chemistry",
grade: "A",
createdAt: "2021-05-29T10:58:15.113Z",
},
{
_id: "60b21e47e5462929cab27a99",
term: "semester-2",
subject: "computer_science",
grade: "B",
createdAt: "2021-05-29T10:58:15.113Z",
},
],
createdAt: "2021-05-29T11:19:48.770Z",
}
{
_id: "60b223541338467beaf3ae0e",
studentName: "Will Smith"
studentGradingDetails: [
{
_id: "60b21e47e5462929cab27a98",
term: "semester-1",
subject: "chemistry",
grade: "D",
createdAt: "2021-05-29T10:58:15.113Z",
},
{
_id: "60b21e47e5462929cab27a99",
term: "semester-2",
subject: "computer_science",
grade: "A",
createdAt: "2021-05-29T10:58:15.113Z",
},
],
createdAt: "2021-05-29T11:19:48.770Z",
}

这是我尝试过并卡住的方法,不确定下一步是什么!?


await db.collection("studentsemestergrades")
.aggregate([
{ $unwind: "$studentGradingDetails" },
{
$group: {
_id: "$studentGradingDetails._id",

},
},
])
.toArray();

预期输出:

每个科目得分不同的学生分布 (_id)

{
"_id" : "60b21e47e5462929cab27a98",
"A" : 12,
"B" : 20,
"C" : 8,
"D" : 2
},
{
"_id" : "60b21e47e5462929cab27a99",
"A" : 5,
"B" : 2,
"C" : 8,
"D" : 12
}

最佳答案

  • $unwind 解构studentGradingDetails数组
  • $group_idgrade 并获得总数
  • $group仅由_idgradecount构造对象的键值对数组
  • $arrayToObject 把上面的键值对数组转换成对象
  • $mergeObjects 合并上面转换后的对象和 _id 字段你可以根据需要添加更多字段
  • $replaceRoot 将上面的合并对象替换为根
await db.collection("studentsemestergrades").aggregate([
{ $unwind: "$studentGradingDetails" },
{
$group: {
_id: {
_id: "$studentGradingDetails._id",
grade: "$studentGradingDetails.grade"
},
count: { $sum: 1 }
}
},
{
$group: {
_id: "$_id._id",
grades: {
$push: {
k: "$_id.grade",
v: "$count"
}
}
}
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{ _id: "$_id" },
{ $arrayToObject: "$grades" }
]
}
}
}
])

Playground

关于node.js - 如何对 MongoDB 中数组内的字段值进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68600119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com