Mongodb 使用$Max的Mongo聚合

Mongodb 使用$Max的Mongo聚合,mongodb,arraylist,aggregation-framework,aggregate-functions,Mongodb,Arraylist,Aggregation Framework,Aggregate Functions,我有一个存储历史记录的集合,即每次对数据进行更改时都会创建一个新文档,我需要根据日期字段的最大值提取字段,但是我的查询会不断返回所有日期,或者要求我将字段推送到数组中,这使得最终用户很难分析数据 预期输出为CSV: MAX(DATE), docID, url, type 1579719200216, 12371, www.foodnetwork.com, food 1579719200216, 12371, www.cnn.com, news, 1579719200216, 12371, ww

我有一个存储历史记录的集合,即每次对数据进行更改时都会创建一个新文档,我需要根据日期字段的最大值提取字段,但是我的查询会不断返回所有日期,或者要求我将字段推送到数组中,这使得最终用户很难分析数据

预期输出为CSV:

MAX(DATE), docID, url, type

1579719200216, 12371, www.foodnetwork.com, food
1579719200216, 12371, www.cnn.com, news,
1579719200216, 12371, www.wikipedia.com, info
样本文件: 以下查询:
首先,您需要浏览
$group
聚合的文档

您应该这样做:

{
$group: {
    "_id": "$document.docId"
    "date": {
        $max: "$document.revisionId"
    },
    "url": {
        $first: "$document.items.list.contents.list.data.comInfo.list.id"
    },
    "type": {
        $first:"$document.items.list.contents.list.data.comInfo.list.type"
    }
}
}

这将为您提供所需的输出

首先,您需要浏览
$group
聚合的文档

您应该这样做:

{
$group: {
    "_id": "$document.docId"
    "date": {
        $max: "$document.revisionId"
    },
    "url": {
        $first: "$document.items.list.contents.list.data.comInfo.list.id"
    },
    "type": {
        $first:"$document.items.list.contents.list.data.comInfo.list.type"
    }
}
}

这将为您提供所需的输出

请提供示例文档请提供示例文档使用“$first”仅提供第一个url+类型,但我的文档将有多个嵌套在同一位置的不同索引号处,使用“$push”可获得正确的结果,但我不希望所有url+类型都在数组中,但是,如果需要唯一的URL,您可以使用
$addToSet
而不是
$push
作为单独的行,如first Displays。这取决于您的使用情况。使用“$first”只能得到第一个url+类型,但我的文档将有多个嵌套在同一位置的不同索引号处,使用“$push”可以得到正确的结果,但我不希望数组中的所有url+类型,但是,如果需要唯一的URL,您可以使用
$addToSet
而不是
$push
作为单独的行,如first Displays。这取决于您的用例。
{
$group: {
    "_id": "$document.docId"
    "date": {
        $max: "$document.revisionId"
    },
    "url": {
        $first: "$document.items.list.contents.list.data.comInfo.list.id"
    },
    "type": {
        $first:"$document.items.list.contents.list.data.comInfo.list.type"
    }
}
}