ZBLOG

mongodb 查询数据,集合数据已有的字段为,_id, name, hobby, tall , 查询条件为 hobby等于篮球,tall 等于 100 ,按照name 字段去重,且按照 time字段从大到小排序,并且记录相同name的记录个数,最后返回的数据记录字段为 _id, name, hobby, tall , count , 其中 count 标识 相同 name 的记录个数

要在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
        }
    }
]);

查询说明:

  1. $match:首先过滤出 hobby 为“篮球”和 tall 为100的文档。
  2. $group:对文档按 name 字段分组,同时计算相同 name 的记录个数并保留其他相关字段。
  3. $sort:按 time 字段降序排序。确保你的集合中存在 time 字段,以便进行正确排序。
  4. $project:最后格式化输出,只返回所需字段。

请将上述查询中的 collection 替换为你的实际集合名称。确保该集合中存在 time 字段以进行排序。如果没有,可以省略 $sort 和相应逻辑。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21006

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?