mongodb - 如何使用 mongodb 展平顶部文档和子文档?
问题描述
我正在处理一个 mongoDB 查询。
假设我正在处理以下学校数据,其中每个级别都有一个唯一标识符。为了这个例子,假设我们有一个参加每个教室的姓氏列表:
School1
Division1
Classroom1
Student1 last name
Student2 last name
Classroom2
Student3 last name
Student4 last name
Divison2
Classroom1
-
Classroom2
-
School2
-
-
-
-
-
我现在想编写一个查询,以这种格式获取所有学生的所有“扁平化”信息:
{
School1,
Division1,
Classroom1,
Student1 last name,
},
{
School1,
Division1,
Classroom1,
Student2 last name,
},
{
School1,
Division1,
Classroom2,
Student3 last name,
},
......
这是我到目前为止所拥有的:
db.students.aggregate(
[
{
$project: {
school: "$school._id",
division: "$school.division._id",
classroom: "$school.division.classroom._id",
student: "$school.division.classroom.student._id",
}
},
{$unwind:"$school"},
{$unwind:"$division"},
{$unwind:"$classroom"},
{$unwind:"$student"},
]
)
有了这个,我得到了我需要但不是所需格式的信息:
school: school1,
division: { division1},
classroom: {classroom1, classroom2},
student: {student1, student2, student3, student4}
什么是一个好的方法?
解决方案
之后进行投影$unwind
:
db.students.aggregate(
[
{$match: {}},
{$unwind:"$school"},
{$unwind:"$division"},
{$unwind:"$classroom"},
{$unwind:"$student"},
{
$project: {
school: "$school._id",
division: "$division._id",
classroom: "$classroom._id",
student: "$student._id",
}
},
]
)
推荐阅读
- java - Java JAI - 将 TIFF 转换为 PNG 结果,图像右侧有黑线
- azure - Azure API 连接 - 如何恢复用户信息
- linux - Docker 未能添加存储库 Universe
- haskell - 数据类型的实例应用程序
- git - GitHub Actions,检测子模块的变化
- android-studio - 如何在android中获取用户位置?
- javascript - Bootstrap modal js 在主线程上给出 Synchronous XMLHttpRequest is deprecated 消息
- c++ - 在 Flutter Windows 桌面应用程序中使用 C++ DLL
- json - 遍历 hashmap 列表和表单层次结构的方法
- javascript - 我将在哪里放置此代码以使其与 Chrome 扩展程序一起使用?