要实现你描述的 MongoDB 查询,涉及到多个步骤,包括过滤、去重、分组和排序。以下是一个可能的 MongoDB 聚合查询示例,它可以满足你的需求:
db.collection.aggregate([
// 第一步:匹配条件
{
$match: {
hobby: "篮球",
tall: 100
}
},
// 第二步:分组以获取去重后的结果并计算记录个数及合并 location 字段
{
$group: {
_id: "$name",
hobby: { $first: "$hobby" }, // 获取第一个 hobby 值
tall: { $first: "$tall" }, // 获取第一个 tall 值
location: { $addToSet: "$location" }, // 合并相同 name 的 location 字段(去重)
count: { $sum: 1 } // 计算相同 name 的记录个数
}
},
// 第三步:处理 location 字段,将其合并为逗号分隔字符串
{
$project: {
_id: 1,
name: "$_id", // 将 _id 字段作为 name 返回
hobby: 1,
tall: 1,
location: { $join : ", " , locations : "$location"}, // 使用逗号连接的方式合并 location
count: 1
}
},
// 第四步:按照 last_time 从大到小排序, 首先需要将 last_time 加入到 group 阶段中,
{
$sort :{last_time:-1}
},
// 第五步:设置分页 offset 和 limit,注意这里是最后一步,因为分页应该在所有聚合操作完成后进行。
{
$skip : 15 // Offset 设置为15
},
{
$limit : 100 // Limit 设置为100
}
]);
注意事项:
- 确保替换
collection
为你实际使用的集合名称。 - 在
$project
阶段,你可能需要使用适当的方法将数组形式的location
转换成逗号分隔的字符串。在 MongoDB 中,可以使用$reduce
或$arrayElemAt
等功能进行更复杂的数据处理。 - 如果你的 MongoDB 实例不支持某些操作或有其他限制,请根据具体情况调整查询。
如果对该代码有任何疑问或需要进一步细节,请告诉我!
内容由零声教学AI助手提供,问题来源于学员提问