要在 MongoDB 中实现你提到的需求,即根据 name
字段去重,并按 time
字段从大到小排序,同时记录相同 name
的记录个数,可以使用聚合框架来完成。以下是一个示例查询:
db.collection.aggregate([
{
// 首先进行分组,按照 name 进行分组
$group: {
_id: "$name", // 按 name 去重
latestRecord: { // 获取每组中时间最大的记录
$max: "$time"
},
count: { // 统计每个 name 的出现次数
$sum: 1
}
}
},
{
// 将结果转为可读格式,包括原始 name 和其他需要的字段
$project: {
_id: 0, // 不显示 _id 字段
name: "$_id", // 显示 name 字段
latestTime: "$latestRecord",// 显示最新时间字段
count: 1 // 显示记录个数字段
}
},
{
// 最后按 latestTime 从大到小排序
$sort: {
latestTime: -1 // 降序排列
}
}
]);
查询解释:
- $group:首先对集合中的文档进行分组,基于
name
字段。在这个阶段,我们获取了每个name
的最大time
值和对应的计数。 - $project:在这个阶段,我们将
_id
转换为可读的name
字段,并且包含了最新的时间和计数。 - $sort:最后,对结果按最新时间从大到小排序。
请确保替换 collection
为你的实际集合名称,并根据具体字段调整上面的代码。如果你需要其他字段的信息,也可以在 $group
阶段适当修改,以便提取更多的数据。
内容由零声教学AI助手提供,问题来源于学员提问