美文网首页
mongodb的aggregate

mongodb的aggregate

作者: firststep | 来源:发表于2017-12-18 10:54 被阅读0次

    前奏:首先接触到mongodb的时候总是感觉不如sql语言用着舒服,但是当你用的熟悉了会发现其实语法都是差不多的。sql元的逻辑性更强些,而mongodb这些nosql语言则更加灵活。

    一、mongodb常用到的就是聚合函数,首先的例子是根据创建时间聚合过滤出年份为2017年,月份为12月的数据。其中“year_data”是自己定义的年份所显示的字段名,name和sex是设置显示这连个字段。

    match:用于过滤数据,只输出符合条件的文档。

    db.getCollection('表名').aggregate([
        { 
            $project: { 'year_data': {$year: "$createdAt"},'month_data': {$month: "$createdAt"}, 'name':1, sex: 1}},
            {$match: {"year_data": 2017,  "month_data" : 12}
        }
    ])
    

    二、显示条数limit。

    由于在真正的项目开发中分页是必须会用到的,因为不可能让用户一页把所有的数据显示完。所以我们就会用到limit限制条数。

    db.getCollection('表名').aggregate([
        { 
            $project: { 'year_data': {$year: "$createdAt"},'month_data': {$month: "$createdAt"}, 'name':1, sex: 1}},
            {$match: {"year_data": 2017,  "month_data" : 12},
            {$limit: 10}
        }
    ])
    

    这样设置就会显示一页显示10条数据。

    三、skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。

    虽然limit可以控制一页显示多少条数据,但是如何区分那一页还是一个需要解决的问题。而skip就可以帮我们很好的解决这个问题。

    db.getCollection('表名').aggregate([
        { 
            $project: { 'year_data': {$year: "$createdAt"},'month_data': {$month: "$createdAt"}, 'name':1, sex: 1}},
            {$match: {"year_data": 2017,  "month_data" : 12},
            {$skip: 10},
            {$limit: 10}
            
        }
    ])
    

    这样查询数据的时候就是跳过前十条记录再查询十条记录,也就是11-20条。也就是第二页。这样就做到了分页的效果。

    四:sort:将输入文档排序后输出。

    由于再做分页的时候不能随便查询数据,需要按照一定的顺序排列然后进行一些过滤等操作。这样才能保证数据的真实性。

    db.getCollection('表名').aggregate([
      { 
          $project: { 'year_data': {$year: "$createdAt"},'month_data': {$month: "$createdAt"}, 'name':1, sex: 1}},
          {$match: {"year_data": 2017,  "month_data" : 12},
          {$sort: {"yearData" => :-1, "monthData" : -1}}
          {$skip: 10},
          {$limit: 10}
          
      }
    ])
    

    -1降序,1为升序。sort需要在skip,limit之前。因为需要先排序好再进行操作。

    相关文章

      网友评论

          本文标题:mongodb的aggregate

          本文链接:https://www.haomeiwen.com/subject/ftipwxtx.html