我正在尝试使用新的aggregation framework将以下类似SQL的语句转换为mongo查询。

SELECT * FROM ...
GROUP BY class

到目前为止,我已经成功编写了以下代码,效果很好-但是仅选择/返回了一个字段。
db.studentMarks.aggregate(
   {
     $project: {
        class : 1 // Inclusion mode
     }
   },
   {
     $group: {
        _id: "$class"
     }
   }
);

我还尝试通过添加一个从不存在的字段名称来尝试使用$ project管道exclusion mode,以欺骗MongoDb返回所有字段。语法正确时,不会返回任何结果。例如:
db.studentMarks.aggregate(
   {
     $project: {
        noneExistingField : 0 // Exclusion mode...
                              // Attempt to trick mongo into returning all fields
                              // sadly this fails - empty array is returned.
     }
   },
   {
     $group: {
        _id: "$class"
     }
   }
);

我需要返回所有字段的原因是,(将来)我将不知道将要显示或不显示哪些字段。例如。 “学生”可能具有x,y,z字段,也可能没有。因此,我需要“全选”,将结果按单个字段分组,然后将其返回,出于一般目的-不必用于“学生成绩”,可以用于任何类型的数据集,而无需了解所有领域。

出于上述原因,我不能简单地投影所有必须返回的字段-再一次-因为我将不知道所有字段。

我希望有人知道使用新的聚合框架解决我的问题的好方法。

最佳答案

只是不要在管道中使用项目运算符。

db.studentMarks.aggregate({
  $group: { _id: "$class" }
});

关于MongoDb聚合: Select all group by x,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10674484/

10-09 20:24
查看更多