要在MongoDB中执行这样的查询,你可以使用聚合管道来实现。以下是一个示例的MongoDB聚合查询,符合你给出的条件:
db.collection.aggregate([
// 第一步:匹配满足条件的文档
{
$match: {
hobby: "篮球",
tall: 100
}
},
// 第二步:按照name字段分组,并计算相同name的记录个数
{
$group: {
_id: "$name", // 按照name去重
count: { $sum: 1 }, // 计算相同name的记录个数
hobby: { $first: "$hobby" }, // 获取hobby字段值
tall: { $first: "$tall" }, // 获取tall字段值
time: { $first: "$time" } // 假设你有time字段用于排序,获取最早的时间戳(可根据需要调整)
}
},
// 第三步:按照time字段从大到小排序
{
$sort: { time: -1 }
},
// 第四步:格式化输出结果
{
$project: {
_id: 1,
name: "$_id", // 将_group中的_id映射为name输出
hobby: 1,
tall: 1,
count: 1
}
}
]);
查询说明:
- $match:首先过滤出
hobby
为“篮球”和tall
为100的文档。 - $group:对文档按
name
字段分组,同时计算相同name
的记录个数并保留其他相关字段。 - $sort:按
time
字段降序排序。确保你的集合中存在time
字段,以便进行正确排序。 - $project:最后格式化输出,只返回所需字段。
请将上述查询中的 collection
替换为你的实际集合名称。确保该集合中存在 time
字段以进行排序。如果没有,可以省略 $sort
和相应逻辑。
内容由零声教学AI助手提供,问题来源于学员提问