Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mongodb聚合$project操作中包含现有字段_Mongodb - Fatal编程技术网

如何在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
        }
}