У меня есть коллекция образцов articles
, которая содержит следующие данные:
/* 0 */
{
"_id" : "post 1",
"author" : "Bob",
"content" : "...",
"page_views" : 5
}
/* 1 */
{
"_id" : "post 2",
"author" : "Bob",
"content" : "...",
"page_views" : 9
}
/* 2 */
{
"_id" : "post 3",
"author" : "Bob",
"content" : "...",
"page_views" : 8
}
Я хотел бы использовать структуру агрегации, чтобы найти минимальное и максимальное значение для страницы просмотров для данного автора, и в процессе отображает _id статьи со значением min/max. Это мой ожидаемый результат:
{ _id : "Bob",
value : { min : { page_views : 5 , _id : "post 1" } ,
max : { page_views , 9 , _id : "post 3" } } }
Я попытался реализации этого агрегацию трубопровода:
db.articles.aggregate([
{
"$group": {
"_id": "$author",
"min_page_views": {
"$min": "$page_views"
},
"max_page_views": {
"$max": "$page_views"
}
}
},
{
"$project": {
"_id": 1,
"min": {
"page_views": "$min_page_views",
"_id": "$_id"
},
"max": {
"page_views": "$max_page_views",
"_id": "$_id"
}
}
}
])
Выход:
/* 0 */
{
"result" : [
{
"_id" : "Bob",
"min" : {
"page_views" : 5,
"_id" : "Bob"
},
"max" : {
"page_views" : 9,
"_id" : "Bob"
}
}
],
"ok" : 1
}
Я не могу показаться, чтобы получить другое поле max._id
или min._id
, который дает исходный идентификатор документа перед проекцией. Как мне изменить конвейер агрегации, чтобы я мог включить это поле?