MongoDb 聚合 : Select all group by x

标签 mongodb aggregation-framework

我正在尝试使用新的 aggregation framework 将以下类似 SQL 的语句转换为 mongo-query .

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/

相关文章:

c# - 如何从 BsonDocument 中正确选择元素的值

mongodb - 部署/auth-mongo-depl : container auth-mongo is waiting to start: mongo can't be pulled

scala - 错误 : class file needed by ValidDateOrNumericTypeHolder, 需要 RegisterJodaTimeConversionHelpers() - 毫无希望,我找不到导入

MongoDB聚合$match阶段与条件查询

MongoDB嵌套查询使用聚合函数

mongodb - 子数组上的MongoDb MapReduce

MongoDB 聚合向文档添加一个新字段(如果另一个字段已存在)

java - Spring Mongodb Upsert 嵌套文档

node.js - 继承 Mongoose 模式

Mongodb 错误 $substrBytes : Invalid range, 结束索引在一个 UTF-8 字符的中间