ZBLOG

mongodb 查询数据,集合数据已有的字段为,_id, name, hobby, tall , location, 查询条件为 hobby在篮球,足球,排球任意一个,tall 为 100 ,offset 为 15,limit为 100,按照name 字段去重,且按照 last_time字段从大到小排序,记录相同name的记录个数, 并且 把相同 name 的记录个数中的 location 字段进行合并,通过逗号分隔,最后返回的数据记录字段为 _id, name, hobby, tall...

要实现您描述的查询,我们可以使用 MongoDB 的聚合管道。以下是一个示例的 MongoDB 聚合查询,它符合您的需求:

db.collection.aggregate([
    // 过滤条件
    {
        $match: {
            hobby: { $in: ["篮球", "足球", "排球"] },
            tall: 100
        }
    },
    // 根据 name 字段分组,计算 count 和合并 location 字段
    {
        $group: {
            _id: "$name",
            hobby: { $first: "$hobby" },
            tall: { $first: "$tall" },
            location: { $push: "$location" }, // 把所有相同 name 的 location 收集到数组中
            count: { $sum: 1 } // 记录相同 name 的记录个数
        }
    },
    // 合并 location 字段,以逗号分隔
    {
        $project: {
            _id: 1,
            name: "$_id",
            hobby: 1,
            tall: 1,
            location: { $reduce: {
                input: "$location",
                initialValue: "",
                in:
                    { $cond:
                        [{ $eq: ["$$value", ""] }, "$$this", { $concat : ["$$value", ", ", "$$this"] }]
                    }
                }},
            count: 1
        }
    },
    // 排序根据 last_time 字段从大到小排序(假设 last_time 是集合中的字段)
    {
        $sort : { last_time : -1 } 
    },
    // 添加偏移和限制,skip 为 offset, limit 为 limit
    {
        $skip : 15
    },
    {
        $limit : 100
    }
]);

查询步骤说明:

  1. $match:首先匹配 hobby 在指定值之内,并且 tall 等于 100。
  2. $group:通过 name 字段进行分组,收集其他需要的数据,包括使用 $push 收集所有 location 值和计数。
  3. $project:将所有的 location 值连接为一个字符串,同时保持其他需要的字段。
  4. $sort:根据 last_time 字段进行降序排序(确保您在文档中有该字段)。
  5. $skip$limit:用于分页处理,跳过前15条记录并限制返回100条记录。

请替换 collection 为您的实际集合名称。这种方法有效地满足了您对数据的需求。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?