ZBLOG

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

要在MongoDB中执行这样的查询,你可以使用聚合管道来实现。以下是一个示例的MongoDB聚合查询,符合你给出的条件:

  1. db.collection.aggregate([
  2. // 第一步:匹配满足条件的文档
  3. {
  4. $match: {
  5. hobby: "篮球",
  6. tall: 100
  7. }
  8. },
  9. // 第二步:按照name字段分组,并计算相同name的记录个数
  10. {
  11. $group: {
  12. _id: "$name", // 按照name去重
  13. count: { $sum: 1 }, // 计算相同name的记录个数
  14. hobby: { $first: "$hobby" }, // 获取hobby字段值
  15. tall: { $first: "$tall" }, // 获取tall字段值
  16. time: { $first: "$time" } // 假设你有time字段用于排序,获取最早的时间戳(可根据需要调整)
  17. }
  18. },
  19. // 第三步:按照time字段从大到小排序
  20. {
  21. $sort: { time: -1 }
  22. },
  23. // 第四步:格式化输出结果
  24. {
  25. $project: {
  26. _id: 1,
  27. name: "$_id", // 将_group中的_id映射为name输出
  28. hobby: 1,
  29. tall: 1,
  30. count: 1
  31. }
  32. }
  33. ]);

查询说明:

  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

注册

已经有帐号?