我有两个模式用户和课程。我必须由每个用户获取课程。另外,我正在存储用户的参考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")
}
}
]
}
我们可以通过 $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',
}
}
])
我知道,我发布的答案太晚了,但是如果将来有人来这里,这可能对他们有所帮助。