如何在MongoDB中为每个唯一值分组并获取具有最大日期的文档

如何在MongoDB中为每个唯一值分组并获取具有最大日期的文档,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,对不起,标题不好。我不知道该怎么说。因此,我有一组关于州的数据,我无法弄清楚如何构建我的管道来获得特定的数据。以下是我收藏的文档示例 { state: "California", date: "2010-08-11" otherData: "Something Else" } 所有文档都是以这种方式格式化的。我想做的是为每个州获取一个包含最近日期的文档。我尝试过使用$group,但我不知道如何从一个文档中获取数据。我尝试使用$match,但我不知道如何为每个状态仅获取一

对不起,标题不好。我不知道该怎么说。因此,我有一组关于州的数据,我无法弄清楚如何构建我的管道来获得特定的数据。以下是我收藏的文档示例

{
    state: "California",
    date: "2010-08-11"
    otherData: "Something Else"
}
所有文档都是以这种方式格式化的。我想做的是为每个州获取一个包含最近日期的文档。我尝试过使用$group,但我不知道如何从一个文档中获取数据。我尝试使用$match,但我不知道如何为每个状态仅获取一个。

尝试以下查询:

db.collection.aggregate([
{
$项目:{
国家:1,
日期:{
$dateFromString:{
日期字符串:“$date”,
格式:“%Y-%m-%d”
}
}
}
},
{
$group:{
_id:“$state”,
最新日期:{
$max:“$date”
}
}
},
{
$项目:{
声明:“$\u id”,
日期:{
$dateToString:{
日期:“$mostRecentDate”,
格式:“%Y-%m-%d”
}
},
_身份证号码:0
}
}
])


假设:给定日期为
YYYY-MM-DD
格式。

您可以尝试以下查询:

db.collection.aggregate([
    /** Group on state and get max doc for each state and max is based on `date` field */
    {
      $group: {
        _id: "$state",
        doc: { $max: { date: "$date", state: "$state", otherData: "$otherData" } } // max works on first field in object
      }
    },
    /** Replace `doc` field as new root */
    {
      $replaceRoot: { newRoot: "$doc" }
    }
  ])

测试:

很抱歉,我很忙,几天都无法检查。非常好,谢谢。我忘了我的数据也是按县划分的,但我可以相对容易地添加这些数据。谢谢。