如何分组和显示猫鼬中多个字段的计数

时间:2015-06-09 13:16:08

标签: node.js mongoose

我在MongoDB中有一个通过CSV文件的数据导入生成的集合。集合中的数据用于某些基本报告,并且所有字段都已展平,并且看起来并不像典型的文档。 以下是2个文档的示例

{

“schoolCode”:“0001”,

"name": "Special Centre",
"ecsTaught": "N",
"elementaryTaught": "Y",
"juniorHighTaught": "N",
"seniorHighTaught": "N",
"authorityCode": "9000",
"offerHomeEducation": "N",
"offerHomeEducationBlended": "N",
"offerSchoolOnline": "N",
"offerSchoolOutreach": "N",
"extractDate": "2015-05-11"

}

{

“schoolCode”:“0002”,

"name": "High point Centre",
"ecsTaught": "y",
"elementaryTaught": "Y",
"juniorHighTaught": "N",
"seniorHighTaught": "Y",
"authorityCode": "9000",
"offerHomeEducation": "N",
"offerHomeEducationBlended": "N",
"offerSchoolOnline": "N",
"offerSchoolOutreach": "N",
"extractDate": "2015-05-11"

}

我想使用mongoose查询以获取计数报告,如下所示

  • Ecs Taught:20
  • 元素教:47
  • JuniorHigh Taught:55
  • SeniorHigh Taught:43

计数应考虑任何具有“Y”并按上述方式投影的字段。 我实际上是mongoose的新手并检查了文档,但没有找到有关如何聚合多列的大量信息。

1 个答案:

答案 0 :(得分:0)

您最有可能只是检索记录(如果集合很大,则以块为单位)并自行进行聚合。无论如何,MongoDB完全检索每个文档。由于您为查询使用了每个文档的相当大部分内容,因此最好自己进行聚合。

也就是说,如果您仍然希望Mongoose这样做,请使用聚合器函数,如this。糟糕的方法是为你需要的每个查询调用它,按字段名和" Y / N"进行分组。 value - 对于您要查询的每个字段。

更好的方法是使用Model.mapReduce执行reduce操作。这样,您就可以对每个文档进行更多种类的查询。