MongoDB彙總操作 (group, aggregate, mapReduce操作)

來源:互聯網
上載者:User

標籤:

#MongoDb 彙總方法 group aggrate mapreduce#1. Group (不支援分區,分布計算)    * 文法結構    <pre>     db.collection.group({        key:{category:1}, // 根據category來分類        cond:{shop_price:{$gt:20}}, // 附加條件商品借個大於20的商品        reduce:function(curr, result){ // curr 標識一行記錄, result自訂變數,        },        initial:{total:0}, // 初始設定變數,此處定義的變數可以在reduce方法中擷取,result.total        finalize:function(result){ // 最後分組後,得到一個result,再對result進行處理        }    });    </pre>    * 處理max    <pre>        db.collection.group({            key:{category:1}, # 根據category來分類            cond:{}, # 附加條件商品借個大於20的商品            reduce:function(curr, result){ # curr 標識一行記錄, result自訂變數,                if(curr > result.total)                    $result.total = curr.shop_price;            },            initial:{total:0}, # 初始設定變數,此處定義的變數可以在reduce方法中擷取,result.total            finalize:function(result){ # 最後分組後,得到一個result,再對result進行處理            }        });    </pre>    * 處理avg    <pre>        db.collection.group({                key:{category:1}, # 根據category來分類                cond:{shop_price:{$gt:20}}, # 附加條件商品借個大於20的商品                reduce:function(curr, result){ # curr 標識一行記錄, result自訂變數,                    result.count += 1;                    result.total += parseFloat(curr.shop_price);                },                initial:{total:0,count:0,avg:0}, # 初始設定變數,此處定義的變數可以在reduce方法中擷取,result.total                finalize:function(result){ # 最後分組後,得到一個result,再對result進行處理                    result.avg = result.total / result.count;                }            });    </pre>2.  aggregate    * 文法結構        <pre>        db.collection.aggregate([            {},            {},            ....,        ]);        </pre>    * $group 類似sql中的select. 根據商品的cat_id、顏色分類, 然後求出分類的商品的庫存量        <pre>            [                {$group:{ _id:{cat_id:"$cat_id", color:"$color"}, total:{$sum:"$goods_number"}}}            ]        </pre>    * $project 類似sql中的select ,取出商品表的cat_id,goods_name,不去出_id欄位        <pre>        [            {$project:{_id:0, cat_id:1, goods_name:1}}        ]        </pre>    * $match 匹配條件 取出商品的分類id為3或者價格大於200元的商品        <pre>        [            {$math:{$or:[{cat_id:3}, {price:{$gt:200}}]}}        ]        </pre>    * $unwind 分割欄位,(欄位必須是數組,否則報錯)        <pre>        Data Model: shoes        {_id:1, feature:["man", "big", "black", "cheap"]}        Command:        db.shoes.aggregate([            {$unwind:"$feature"}        ])        Output:        {_id:1,feature:"man"}        {_id:1,feature:"big"}        {_id:1,feature:"black"}        {_id:1,feature:"cheap"}        </pre>    * $redact [編輯條件](http://docs.mongodb.org/manual/reference/operator/aggregation/redact/#pipe._S_redact)    * $limit 限制條件 只取30條記錄        <pre>        [            {$limit: 30}        ]        </pre>    * $sort 排序 根據商品庫存正序,1/正序 -1/倒序        <pre>        [            {$sort:{goods_number:1,}}        ]        </pre>    * $geoNear [距離計算](http://docs.mongodb.org/manual/reference/operator/aggregation/geoNear/#pipe._S_geoNear)    * $skip 跳過行 跳過20行        <pre>        [            {$skip: 20}        ]        </pre>    * $out 將匹配的結果輸出到另外一個集合中, 將價格大於3000的商品取出 cat_id,goods_name,goods_number欄位,不去出_id欄位,然後按照商品的cat_id,color分類,結果跳過一行,只取30杭記錄,把結果push到result集合中        <pre>        [            {$math:{goods_price:{$gte:3000}}},            {$project:{cat_id:1,goods_name:1, goods_number:1, _id:0}},            {$group:{_id:{cat_id:"$cat_id", color:"$color"}, total:{$sum:"$goods_number"}}},            {$skip:1},            {$limit:30},            {$out:"result"}        ]        </pre>3. mapReduce方法    * 文法結構        <pre>            db.collection.mapReduce(                function(){                    emit(this.cat_id, this.goods_number);                }, // map方法                function(key,value){                    return Array.sum(value);                }, // reduce方法                {                    query:{goods_id:{$gt:30}},                    out:"mapReduceResultSet"                }            );        </pre>    * [more information](http://docs.mongodb.org/manual/core/map-reduce/)

 

MongoDB彙總操作 (group, aggregate, mapReduce操作)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.