Arrays 如何获取mongo中所有嵌套数组的计数?
对于给定的样本数据,如下所示:Arrays 如何获取mongo中所有嵌套数组的计数?,arrays,mongodb,mongodb-query,aggregation-framework,Arrays,Mongodb,Mongodb Query,Aggregation Framework,对于给定的样本数据,如下所示: { name: "School 1", classes: [ { name: "Class 1", students: [ { name: "Student 1" }, {
{
name: "School 1",
classes: [
{
name: "Class 1",
students: [
{
name: "Student 1"
},
{
name: "Student 2"
}
]
},
{
name: "Class 2",
students: [
{
name: "Student 3"
},
{
name: "Student 4"
},
{
name: "Student 5"
}
]
},
]
},
{
name: "School 2",
classes: [
{
name: "Class 3",
students: [
{
name: "Student 6"
}
]
},
{
name: "Class 4",
students: [
{
name: "Student 7"
},
{
name: "Student 8"
}
},
{
name: "Class 5",
students: [
{
name: "Student 9"
}
]
}
]
}
我需要得到每个学校的班级数量,以及每个班级的学生数量。因此,预计产出如下所示:
{
name: "School 1",
classesCount: 2,
classes: [
{
name: "Class 1",
studentsCount: 2
},
{
name: "Class 2",
studentsCount: 3
}
]
},
{
name: "School 2",
classesCount: 3,
classes: [
{
name: "Class 3",
studentsCount: 1
},
{
name: "Class 4",
studentsCount: 2
},
{
name: "Class 5",
studentsCount: 1
}
]
}
我可以使用以下查询获取每所学校的班级数量,但无法进一步统计每所学校的学生人数:
db.getCollection('Schools').aggregate([
{
$project: {
name: 1, //name of school
classesCount: { $cond: { if: { $isArray: "$classes" }, then: { $size: "$classes" }, else: "NA"} },
classes: ??
}
}
])
这个结果的查询应该是什么样的?查询还应处理任何类和学生的null或0元素。您必须使用运算符应用于每个类,以便获得该类的sudent大小
问题是:
db.collection.aggregate([
{
$project: {
classes: {
$map: {
input: "$classes",
as: "classes",
in: {
name: "$$classes.name",
studentsCount: {
$size: "$$classes.students"
}
}
}
}
}
}
])
您可以测试查询。除上述内容外,如果我有很多学校,是否可以筛选出一些学校并仅预测某些学校?例如,按学校名称,或按班级数量(=0,>0等),以便投影列表在该阶段之前的$project阶段为tinylook,并带有$filter运算符。一定要把它放在前面,因为像这样的书只会过滤班级和学生,所以最后的项目仍然会显示所有的学校。你能展示一下如何只展示2班或更少的学校吗?所以上面的场景只会输出一个学校。因为类在第一级是一个数组,所以您可以简单地使用$size的$match阶段$比赛阶段是我需要的,谢谢@matthPen!