-
SELECT A,B, SUM(C) FROM test GROYP BY A,B 어떻게?NoSQL/MongoDB 2012. 10. 10. 16:54
안녕하세요. 이스트럭(강동운) 입니다.
간만에? 포스팅을 하는 군요~!
오늘은.. 아래 쿼리를 어떻게 mongodb에서 표현을 할까?
INSERT INTO TEST1 SELECT A,B, SUM(C) FROM test GROYP BY A,B
일단 쿼리는 mongodb 2.2 부터 가능한 쿼리고요 aggregate를 활용했습니다.
db.test.insert({"a": 1, "b": 1, "c": 100}); db.test.insert({"a": 1, "b": 1, "c": 200}); db.test.insert({"a": 1, "b": 1, "c": 300}); db.test.insert({"a": 1, "b": 1, "c": 400}); db.test.insert({"a": 1, "b": 2, "c": 100}); db.test.insert({"a": 1, "b": 2, "c": 200}); db.test.insert({"a": 1, "b": 2, "c": 300}); db.test.insert({"a": 1, "b": 3, "c": 100}); db.test.insert({"a": 1, "b": 3, "c": 200}); db.test.insert({"a": 1, "b": 4, "c": 100}); db.test.insert({"a": 2, "b": 1, "c": 500}); db.test.insert({"a": 2, "b": 1, "c": 600}); db.test.insert({"a": 2, "b": 2, "c": 300}); db.test.aggregate( { $group : {_id : {"a": "$a", "b": "$b"} , total : { $sum : "$c" }} }).result.forEach( function(f) { db.test1.save({"a": tojson(f._id.a,'',true), "b": tojson(f._id.b,'',true), "total": tojson(f.total,'',true)}); } ); db.test1.find();
원래 $group이라는게.. 이전 버전에서는.. _id: {a: 1, b: 1 .. }이런 방식이였는데.. 2.2 부터는.. _id: {"a": "$a" ...} 이런 방식으로 변경되었나 봅니다 ^^;;
참고 URL 들
http://stackoverflow.com/questions/11418985/mongodb-aggregation-framework-group-over-multiple-values
http://stackoverflow.com/questions/8769323/mongodb-group-by-functionalities
http://docs.mongodb.org/manual/reference/aggregation/#_S_group
http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
http://www.mongodb.org/display/DOCS/SQL+to+Aggregation+Framework+Mapping+Chart
여기가 갑임!! http://dotheweb.posterous.com/mongodb-new-aggregation-framework-and-sql-sid
감사합니다 ^^
작성자: 이스트럭(강동운)
작성일: 2012-10-10