Mongodb 使用$Max的Mongo聚合
我有一个存储历史记录的集合,即每次对数据进行更改时都会创建一个新文档,我需要根据日期字段的最大值提取字段,但是我的查询会不断返回所有日期,或者要求我将字段推送到数组中,这使得最终用户很难分析数据 预期输出为CSV: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
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"
}
}
}