我有一个学生及其联系方式的数据库.

{学生代码:'smi0001',名字:'bob',姓氏:'smith',邮编:

我想我可以使用聚合框架来找出大多数学生的邮政编码,比如...

db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}})

这就像预期的那样(返回邮政编码为_id,每个邮政编码中的学生人数为"学生",但如果我将$sort添加到管道中,它似乎会try 按整个学生集合排序,而不是$group操作的结果.

我想要的是...

db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}, $sort: {_id: -1}})

但它返回了整个集合,忽略了$project$group...

推荐答案

你差点就成功了...

db.test.aggregate(
  {$group: {_id: '$postcode', students: {$sum: 1}}}, 
  {$sort: {_id: -1}}
);

给出(我添加了一些与样本匹配的测试数据):

{
  "result" : [
    {
        "_id" : 2003,
        "students" : 3
    },
    {
        "_id" : 2002,
        "students" : 1
    },
    {
        "_id" : 2001,
        "students" : 2
    }
  ],
  "ok" : 1
}

你在每件事上都有一个外部的{},这引起了一些混乱.该小组和sort在管道中没有作为单独的操作进行工作.

你并不真的需要这个项目.

Update你可能想按"学生"排序,比如说,首先得到最大的Zipcode(按人口):

db.test.aggregate(
  {$group: {_id: '$postcode', students: {$sum: 1}}}, 
  {$sort: {students: -1}}
);

Mongodb相关问答推荐

MongoDB对两个串联数组进行排序

所有文档中嵌套 struct 中的条件匹配-mongodb

如何使用 MindsDB 和 MQL(对于我的 MongoDB 实例)实施零样本分类?

如何为具有相同名称的嵌套字段创建文本索引

如何在 MongoDB 中对字段进行自定义排序

有没有办法从另一条记录中插入一条记录

在mongodb中,如何使用聚合来获取字段之间的对应关系

映射数组导致 mongodb 聚合

使用 AngularJs 和 MongoDB/Mongoose

从 PHP 打印 MongoDB 日期

oplog 在独立 mongod 上启用,不适用于副本集

通过 Spring Boot 应用程序访问 mongodb 时的身份验证错误

$lookup 结果 mongodb 的计数

使用 Node.js 和 mongodb 处理超时

有没有办法将python对象直接存储在mongoDB中而不序列化它们

MongoDB $or 查询

mongo - Ruby连接问题

Mongoose:Model.create 和 Collection.insert 有什么区别

MongoDB Compass timeouts超时

无法从 mongodb 中删除集合