如何在mongodb聚合$project操作中包含现有字段
我有一个样本集如何在mongodb聚合$project操作中包含现有字段,mongodb,Mongodb,我有一个样本集文章,其中包含以下数据: /* 0 */ { "_id" : "post 1", "author" : "Bob", "content" : "...", "page_views" : 5 } /* 1 */ { "_id" : "post 2", "author" : "Bob", "content" : "...", "page_views" : 9 } /* 2 */ { "_id" : "post
文章
,其中包含以下数据:
/* 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。这是我的预期输出:
{ _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.\u id
或min.\u id
,该字段在投影之前提供原始文档id。如何更改聚合管道,以便也可以包含此字段?您可以修改聚合管道,如下所示:
- 在你的演讲之前包括一个舞台
stage操作符以升序获取记录
- 然后获取每组的数据和记录
这将分别为每个作者保存
最低的
和最高的
浏览页面
是一个系统变量,用于引用当前正在处理的文档的顶级元素
修改代码:
db.articles.aggregate([
{$sort:{"page_views":1}},
{$group:{"_id":"$author",
"max":{$last:"$$ROOT"},
"min":{$first:"$$ROOT"}}},
{$project:{"max.page_views":1,
"max._id":1,
"min.page_views":1,
"min._id":1}}
])
订单样本:
{
"_id" : "Bob",
"max" : {
"_id" : "post 2",
"page_views" : 9
},
"min" : {
"_id" : "post 1",
"page_views" : 5
}
}