zoukankan      html  css  js  c++  java
  • mongoDB进行分组操作

    一、$group 进行分组

    1、每个职位的雇员人数:

    db.getCollection('emp').aggregate(

       [

         {'$group':{

               ‘_id’:'$job',

               job_count:{'$sum':1}

        }

             }

       ]

    )

    2、每个职位的总工资

    db.getCollection('emp').aggregate(

       [

         {'$group':{

               ‘_id’:'$job',

               job_salaryt:{'$sum':'$salary'}

        }

             }

       ]

    )

    3、每个职位的平均工资

    db.getCollection('emp').aggregate(

       [

            {'$group':{

                      ‘_id’:'$job',

                      job_salaryt:{'$sum':'$salary'},

                      job_salary_avg:{'$avg':'$salary'}

                       }

                 }

       ]

    )

    4、每种职位的最高与最低工资

    db.getCollection('emp').aggregate(

       [

            {'$group':{

                      ‘_id’:'$job',

                     max_salaryt:{'$max':'$salary'},

                      min_salary:{'$min':'$salary'}

                       }

                 }

       ]

    )

    5、每个职位的工资

    db.getCollection('emp').aggregate(

        [

           {

             ‘$group’:{

                     '_id':'$job',

                   'salary_data':{'$push':'$salary'}

             }

           }

       ]

    )

    6、每个职位的人员

    db.getCollection('emp').aggregate(

        [

           {

             ‘$group’:{

                     '_id':'$job',

                   'position_name':{'$addToSet':'$name'}  //addToSet,如果有重复的人名,保留一个

             }

           }

       ]

    )

    二、$project 进行数据的规则显示

    1、别名

    db.getCollection('emp').aggregate(

    [

       {'$project':{

            '_id':0

           '职位':'$job',

           'name':1

               }

       }

    ]

    )

    2、年薪

    db.getCollection('emp').aggregate(

    [

         {

               '$project':{

                  'name':1,

                   'salary':{'年薪':{'$multiply':['$salary',12]}}

                }

         }

    ]

    )

     3.判断职位,返回-1 或0

    db.getCollection('emp').aggregate(

     [

          {'$project':{

                 '_id':0,

                'name':1,

                '职位':'$job',

                'job':{'$strcasecmp':['$job','manager']}

              }

          }

    ]

    )

    三、$macth、$group、$project综合操作

    db.getCollection('emp').aggregate(

    [

        {  $match:{

                    salary:{

                               {'$gte':1000,'$lte':30000}

                         }

                    }

              },

        {    

                     $project:{

                                 { '_id':1,

                                  'name':1,

                                  'salary':1,

                                  'job':1

                                 }

                     }

             },

         {

                    $group:{

                                {'_id':'$job','count':{'$sum':1},'avg':{'$avg':'$salary'}}

          }

                  

       },

        {sort:{'count':-1}}

    ]

    四、$add ,$sum,$group,$sum,$match,$substr

    db.photo.aggregate([{
            $match: {
                siteId: {
                    $in: datas.parks
                },
                'shootOn': {
                    $gte: minT,
                    $lte: maxT
                }
            }
        }, {
            $project: {
                siteId: 1,
                shootOn: 1,
                locationId: 1,
                saleNum: {
                    $size: '$orderHistory'
                }
            }
        }, {
            $group: {
                _id: {
                    year: {
                        $year: {
                            $add: ['$shootOn', 28800000]
                        }
                    },
                    month: {
                        $month: {
                            $add: ['$shootOn', 28800000]
                        }
                    },
                    day: {
                        $dayOfMonth: {
                            $add: ['$shootOn', 28800000]
                        }
                    },
                    location: '$locationId'
                },
                count: {
                    $sum: '$saleNum'
                }
            }
        }, {
            $project: {
                _id: 0,
                locationId: '$_id.location',
                saleInfo: {
                    day: {
                        '$concat': [{
                            $substr: ['$_id.year', 0, 4]
                        }, '/', {
                            $substr: ['$_id.month', 0, 2]
                        }, '/', {
                            $substr: ['$_id.day', 0, 2]
                        }]
                    },
                    count: '$count',
                }
            }
        }, {
            $group: {
                _id: '$locationId',
                saleInfo: {
                    $addToSet: '$saleInfo'
                }
            }
        }])
    db.order.aggregate([{
    		$match: {
    			siteId: {
    				$in: parks
    			},
    			'payInfo.payTime': {
    				$gte: minT,
    				$lte: maxT
    			},
    			'orderStatus.status':5
    		}
    	}, {
    		$group: {
    			_id: {
    				year: {
    					$year: {
    						$add: ['$payInfo.payTime', 28800000]
    					}
    				},
    				month: {
    					$month: {
    						$add: ['$payInfo.payTime', 28800000]
    					}
    				},
    				day: {
    					$dayOfMonth: {
    						$add: ['$payInfo.payTime', 28800000]
    					}
    				},
    				siteId: '$siteId'
    			},
    			count: {
    				$sum: 1
    			},
    			sales: {
    				$sum: '$charge'
    			}
    		}
    	}, {
    		$project: {
    			_id: 0,
    			count: '$count',
    			sales: '$sales',
    			siteId: '$_id.siteId',
    			day: {
    				'$concat': [{
    					$substr: ['$_id.year', 0, 4]
    				}, '/', {
    					$substr: ['$_id.month', 0, 2]
    				}, '/', {
    					$substr: ['$_id.day', 0, 2]
    				}]
    			}
    		}
    	}])
    

      

  • 相关阅读:
    jsp页面数据分页模仿百度分页效果
    java EL表达式
    服务器端javascript——Rhino和Node
    HBase协处理器
    Hbase 计数器
    javascript正则表达式(二)——方法
    javascript正则表达式(一)——语法
    javascript模块化
    使用sqoop工具从oracle导入数据
    HBASE API操作问题总结
  • 原文地址:https://www.cnblogs.com/qiyc/p/9053909.html
Copyright © 2011-2022 走看看