Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何获取mongo中所有嵌套数组的计数?_Arrays_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

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!