文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MongoDB中怎么实现管道操作符

2023-06-19 12:54

关注

MongoDB中怎么实现管道操作符,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

$group

基本操作

$group可以用来对文档进行分组,比如我想将订单按照城市进行分组,并统计出每个城市的订单数量:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",count:{$sum:1}}})

我们将要分组的字段传递给$group函数的_id字段,然后每当查到一个,就给count加1,这样就可以统计出每个城市的订单数量。

算术操作符

通过算术操作符我们可以对分组后的文档进行求和或者求平均数。比如我想计算每个城市订单运费总和,如下:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",totalFreight:{$sum:"$freight"}}})

先按地址分组,再求和。这里贴出部分查询结果,如下:

{    "_id" : "HaiKou",    "totalFreight" : 20.0}{    "_id" : "HangZhou",    "totalFreight" : 10.0}

也可以计算每个城市运费的平均数,如下:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",avgFreight:{$avg:"$freight"}}})

先按地址分组,然后再计算平均数。

极值操作符

极值操作符用来获取分组后数据集的边缘值,比如获取每个城市最贵的运费,如下:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",maxFreight:{$max:"$freight"}}})

查询每个城市最便宜的运费:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",minFreight:{$min:"$freight"}}})

按城市分组之后,获取该城市第一个运费单:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",firstFreight:{$first:"$freight"}}})

获取分组后的最后一个运费单:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",lastFreight:{$last:"$freight"}}})

数据操作符

$addToSet可以将分组后的某一个字段放到一个数组中,但是重复的元素将只出现一次,而且元素加入到数组中的顺序是无规律的,比如将分组后的每个城市的运费放到一个数组中,如下:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",freights:{$addToSet:"$freight"}}})

重复的freight将不会被添加进来。

$push则对重复的数据不做限制,都可以添加进来,如下:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",freights:{$push:"$freight"}}})

$unwind

$unwind用来实现对文档的拆分,可以将文档中的值拆分为单独的文档,比如我的数据如下:

{    "_id" : ObjectId("59f93c8b8523cfae4cf4ba86"),    "name" : "鲁迅",    "books" : [         {            "name" : "呐喊",            "publisher" : "花城出版社"        },         {            "name" : "彷徨",            "publisher" : "南海出版出"        }    ]}

使用$unwind命令将其拆分为独立文档,如下:

db.sang_books.aggregate({$unwind:"$books"})

拆分结果如下:

{    "_id" : ObjectId("59f93c8b8523cfae4cf4ba86"),    "name" : "鲁迅",    "books" : {        "name" : "呐喊",        "publisher" : "花城出版社"    }}{    "_id" : ObjectId("59f93c8b8523cfae4cf4ba86"),    "name" : "鲁迅",    "books" : {        "name" : "彷徨",        "publisher" : "南海出版出"    }}

其他操作符

$sort操作可以对文档进行排序,如下:

db.sang_collect.aggregate({$sort:{orderAddressL:1}})

用法和我们之前介绍普通搜索中的一致,可以按照存在的字段排序,也可以按照重命名的字段排序,如下:

db.sang_collect.aggregate({$project:{oa:"$orderAddressL"}},{$sort:{oa:-1}})

1表示升序、-1表示降序。

$limit返回结果中的前n个文档,如下表示返回结果中的前三个文档:

db.sang_collect.aggregate({$project:{oa:"$orderAddressL"}},{$limit:3})

$skip表示跳过前n个文档,比如跳过前5个文档,如下:

db.sang_collect.aggregate({$project:{oa:"$orderAddressL"}},{$skip:5})

$skip的效率低,要慎用。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯