我们如何从MongoDB的Groupby查询返回_id字段



我有两个模式用户课程。我必须由每个用户获取课程。另外,我正在存储用户的参考ID

为了获得结果,我已经按照以下格式完成了汇总查询

db.lessons.aggregate([{
  $lookup: {
    from: "users",
    localField: "user",
    foreignField: "_id",
    as: "user"
  }
}, {
  "$project": {
    "user": "$user.email",
    "title": "$title",
    "scheduled_at": "$scheduled_at"
  }
}, {
  $group: {
    _id: "$user",
    num_lessons: {
      $sum: 1
    },
    lessons: {
      $push: {
        title: "$title",
        schedule: "$scheduled_at"
      }
    }
  }
}])

从上面的查询中,我可以获取下面的输出,

{
    "_id" : [ 
        "harry.quill@gmail.com"
    ],
    "num_lessons" : 1.0,
    "lessons" : [ 
        {
            "title" : "welcome to Mongoose",
            "schedule" : {
                "endTime" : ISODate("2017-06-12T08:30:00.000Z"),
                "startTime" : ISODate("2017-06-10T04:00:00.000Z")
            }
        }
    ]
}

{
    "_id" : [ 
        "tom.quill@gmail.com"
    ],
    "num_lessons" : 1.0,
    "lessons" : [ 
        {
            "title" : "welcome to Angularjs",
            "schedule" : {
                "endTime" : ISODate("2017-05-31T09:30:00.000Z"),
                "startTime" : ISODate("2017-05-21T04:00:00.000Z")
            }
        }
    ]
}

现在,我想重命名 _id 用户。是否可以在聚合管道中实现此目标?

我们可以通过 $project

做到这一点
db.lessons.aggregate([{
  $lookup: {
    from: "users",
    localField: "user",
    foreignField: "_id",
    as: "user"
  }
}, {
  "$project": {
    "user": "$user.email",
    "title": "$title",
    "scheduled_at": "$scheduled_at"
  }
}, {
  $group: {
    _id: "$user",
    num_lessons: {
      $sum: 1
    },
    lessons: {
      $push: {
        title: "$title",
        schedule: "$scheduled_at"
      }
    }
  }
},
{
  $project: {
    _id: 0,
    user: "$_id",
    num_lessons: '$num_lessons',
    lessons: '$lessons',
  }
}
])

我知道,我发布的答案太晚了,但是如果将来有人来这里,这可能对他们有所帮助。

最新更新