{"id":3955,"date":"2017-08-22T10:00:34","date_gmt":"2017-08-22T17:00:34","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3955"},"modified":"2025-06-13T17:32:59","modified_gmt":"2025-06-14T00:32:59","slug":"aggregate-grouping-n1ql-mapreduce","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/aggregate-grouping-n1ql-mapreduce\/","title":{"rendered":"N1QL\/MapReduce\ub97c \uc0ac\uc6a9\ud55c \uc9d1\uacc4 \uadf8\ub8f9\ud654"},"content":{"rendered":"<div class=\"paragraph\">\n<p>\uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc758 \uc81c\ubaa9\uc744 \uc9d1\uacc4 \uadf8\ub8f9\ud654\ub85c \uc815\ud588\uc9c0\ub9cc \uc774\uac83\uc774 \uac00\uc7a5 \uc801\ud569\ud55c \uc774\ub984\uc778\uc9c0\ub294 \ubaa8\ub974\uaca0\uc2b5\ub2c8\ub2e4. MySQL\uc758 <a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/group-by-functions.html#function_group-concat\">GROUP_CONCAT \ud568\uc218<\/a> \ub610\ub294 <a href=\"https:\/\/stackoverflow.com\/questions\/451415\/simulating-group-concat-mysql-function-in-microsoft-sql-server-2005\"><code>FOR XML PATH('')<\/code> SQL Server\uc758 \ud574\uacb0 \ubc29\ubc95<\/a>? \uc774\uac83\uc774 \ubc14\ub85c \uc81c\uac00 \uc624\ub298 \uc774 \uae00\uc744 \uc4f0\ub294 \uc774\uc720\uc785\ub2c8\ub2e4. Couchbase Server\ub97c \uc0ac\uc6a9\ud558\uba74 \uac00\uc7a5 \uc27d\uac8c \ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc740 N1QL\uc758 <code>ARRAY_AGG<\/code> \ud568\uc218\ub97c \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc9c0\ub9cc, \uad6c\uc2dd MapReduce \ubcf4\uae30\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc218\ud589\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774 \uae00\uc744 \uc4f0\ub294 \uc774\uc720\ub294 \uc800\ud76c \uc194\ub8e8\uc158 \uc5d4\uc9c0\ub2c8\uc5b4 \uc911 \ud55c \uba85\uc774 \ud55c \uace0\uac1d(\uc774\ub984\uc744 \ubc1d\ud788\uc9c0 \uc54a\uaca0\uc2b5\ub2c8\ub2e4)\uc744 \uc704\ud574 \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uace0 \uc788\uc5c8\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uc6b0\ub9ac \ub458 \ub2e4 \ud574\ub2f5\uc774 \ub2f4\uae34 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc5c8\uae30 \ub54c\ubb38\uc5d0 \ud568\uaed8 \ud574\uacb0\ucc45\uc744 \uc0dd\uac01\ud574\ub0b8 \ud6c4 \ubbf8\ub798\uc758 \uc800\ub97c \uc704\ud574 \ube14\ub85c\uadf8\uc5d0 \uc62c\ub9ac\uae30\ub85c \uacb0\uc815\ud588\uc2b5\ub2c8\ub2e4(\uc0ac\uc2e4 \uc81c\uac00 \ube14\ub85c\uadf8\uc5d0 \uae00\uc744 \uc4f0\ub294 \uc8fc\ub41c \uc774\uc720\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4). \ub610 \ub2e4\ub978 \uc774\uc720\ub294 \ub2e4\ub978 \uc0ac\ub78c\uc774 \ub354 \uc88b\uc740 \ubc29\ubc95\uc744 \uc54c\uace0 \uc788\ub294\uc9c0 \uc54c\uc544\ubcf4\uae30 \uc704\ud574\uc11c\uc785\ub2c8\ub2e4.)<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc2dc\uc791\ud558\uae30 \uc804\uc5d0 \uba87 \uac00\uc9c0 \uc790\ub8cc\ub97c \uc900\ube44\ud574 \ub450\uc5c8\uc73c\ub2c8 \ucc38\uace0\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4. \uc774 \uac8c\uc2dc\ubb3c\uc5d0 \uc0ac\uc6a9\ub41c '\ud658\uc790' \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\ub294 \ub370 \uc0ac\uc6a9\ud55c \uc18c\uc2a4 \ucf54\ub4dc <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/076GroupConcateN1qlAndMapReduce\/src\">\ub294 \uae43\ud5c8\ube0c\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/a>. NET\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\ub2e4\uba74, \uadf8\ub0e5 <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/tools\/cbimport.html\">cbimport<\/a> on <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/blob\/master\/Groves\/076GroupConcateN1qlAndMapReduce\/src\/GenerateData\/GenerateData\/patients.json\">\uc0d8\ud50c \ub370\uc774\ud130<\/a> \ub97c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. (\ub610\ub294 <a href=\"https:\/\/query.pub.couchbase.com\/tutorial\/#1\">N1QL \uc0cc\ub4dc\ubc15\uc2a4<\/a>\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub098\uc911\uc5d0 \uc124\uba85\ud569\ub2c8\ub2e4.) \uc774 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc758 \ub098\uba38\uc9c0 \ubd80\ubd84\uc5d0\uc11c\ub294 \ud574\ub2f9 \uc0d8\ud50c \ub370\uc774\ud130\uac00 \ub4e4\uc5b4 \uc788\ub294 '\ud658\uc790' \ubc84\ud0b7\uc774 \uc788\ub2e4\uace0 \uac00\uc815\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_requirements\">\uc694\uad6c \uc0ac\ud56d<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\ud658\uc790 \ubb38\uc11c\uac00 \uac00\ub4dd \uc313\uc5ec \uc788\uc2b5\ub2c8\ub2e4. \uac01 \ud658\uc790\uc5d0\ub294 \ud55c \uba85\uc758 \uc758\uc0ac\uac00 \uc788\uc2b5\ub2c8\ub2e4. \ud658\uc790 \ubb38\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ud544\ub4dc\ub85c \uc758\uc0ac\ub97c \uac00\ub9ac\ud0b5\ub2c8\ub2e4. <code>doctorId<\/code>. \ud658\uc790 \ubb38\uc11c\uc5d0\ub294 \ub2e4\ub978 \ub370\uc774\ud130\ub3c4 \uc788\uc744 \uc218 \uc788\uc9c0\ub9cc, \uc8fc\ub85c \ud658\uc790 \ubb38\uc11c\uc758 \ud0a4\uc640 <code>doctorId<\/code> \uac12\uc73c\ub85c \uc124\uc815\ud569\ub2c8\ub2e4. \uba87 \uac00\uc9c0 \uc608\uc785\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">key 01257721\r\n{\r\n    \"doctorId\": 58,\r\n    \"patientName\": \"Robyn Kirby\",\r\n    \"patientDob\": \"1986-05-16T19:01:52.4075881-04:00\"\r\n}\r\n\r\nkey 116wmq8i\r\n{\r\n    \"doctorId\": 8,\r\n    \"patientName\": \"Helen Clark\",\r\n    \"patientDob\": \"2016-02-01T04:54:30.3505879-05:00\"\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc73c\ub85c, \uac01 \uc758\uc0ac\uac00 \uc5ec\ub7ec \uba85\uc758 \ud658\uc790\ub97c \uac00\uc9c8 \uc218 \uc788\ub2e4\uace0 \uac00\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc758\uc0ac \ubb38\uc11c\uac00 \uc874\uc7ac\ud55c\ub2e4\uace0 \uac00\uc815\ud560 \uc218\ub3c4 \uc788\uc9c0\ub9cc \uc774 \ud29c\ud1a0\ub9ac\uc5bc\uc5d0\uc11c\ub294 \uc2e4\uc81c\ub85c \ud544\uc694\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \uc9c0\uae08\uc740 \ud658\uc790\uc5d0\ub9cc \uc9d1\uc911\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c, \uc6b0\ub9ac\uac00 \uc560\ud50c\ub9ac\ucf00\uc774\uc158(\ub610\ub294 \ubcf4\uace0\uc11c \ub4f1)\uc5d0\uc11c \uc6d0\ud558\ub294 \uac83\uc740 \uc758\uc0ac\uc640 \ud568\uaed8 \ud658\uc790\ub97c \uc885\ud569\uc801\uc73c\ub85c \uadf8\ub8f9\ud654\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uac01 \ub808\ucf54\ub4dc\ub294 \uc758\uc0ac\uc640 \ud658\uc790 \ubaa9\ub85d\/\ubc30\uc5f4\/\ubaa8\uc74c\uc744 \uc2dd\ubcc4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4<\/p>\n<\/div>\n<table class=\"tableblock frame-all grid-all spread\">\n<colgroup>\n<col style=\"width: 50%\" \/>\n<col style=\"width: 50%\" \/> <\/colgroup>\n<thead>\n<tr>\n<th class=\"tableblock halign-left valign-top\">\uc758\uc0ac<\/th>\n<th class=\"tableblock halign-left valign-top\">\ud658\uc790<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">58<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">01257721, 450MKKRI, 8G2MRZE2 ...<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">8<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">05WOKNFK, 116WMQ8I, 2T5YTTQI ...<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">... \ub4f1 ...<\/p>\n<\/td>\n<td class=\"tableblock halign-left valign-top\">\n<p class=\"tableblock\">... \ub4f1 ...<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"paragraph\">\n<p>\uc608\ub97c \ub4e4\uc5b4 \uc758\uc0ac\uc5d0\uac8c \ubc30\uc815\ub41c \ubaa8\ub4e0 \ud658\uc790\ub97c \ubcf4\uc5ec\uc8fc\ub294 \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \uc720\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud615\uc2dd\uc758 \ub370\uc774\ud130\ub97c N1QL \ub610\ub294 MapReduce\ub85c \uc5b4\ub5bb\uac8c \uac00\uc838\uc62c \uc218 \uc788\uc744\uae4c\uc694?<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_n1ql_aggregate_grouping\">N1QL \uc9d1\uacc4 \uadf8\ub8f9\ud654<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/products\/n1ql\/\">N1QL<\/a> \ub294 \uc6b0\ub9ac\uc5d0\uac8c <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-language-reference\/arrayfun.html\"><code>ARRAY_AGG<\/code> \ud568\uc218<\/a> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uc774\ub97c \uac00\ub2a5\ud558\uac8c \ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uba3c\uc800 \uac01 \ud658\uc790 \ubb38\uc11c\uc5d0\uc11c \uc758\uc0ac ID\uc640 \ud658\uc790 \ubb38\uc11c\uc758 \ud0a4\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c <code>ARRAY_AGG<\/code> \ub97c \ud658\uc790 \ubb38\uc11c ID\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4. \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc758\uc0ac ID\ubcc4\ub85c \uacb0\uacfc\ub97c \uadf8\ub8f9\ud654\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\">SELECT p.doctorId AS doctor, ARRAY_AGG(META(p).id) AS patients\r\nFROM patients p\r\nGROUP BY p.doctorId;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p><em>\ucc38\uace0: \uc2e4\ud589\ud558\ub294 \uac83\uc744 \uc78a\uc9c0 \ub9c8\uc138\uc694. <code>\ud658\uc790\uc5d0 \ub300\ud55c \uae30\ubcf8 \uc9c0\ud45c \ub9cc\ub4e4\uae30<\/code> \ub97c \uc0ac\uc6a9\ud558\uc5ec \uae30\ubcf8 \uc778\ub371\uc2a4 \uc2a4\uce94\uc744 \ud65c\uc131\ud654\ud569\ub2c8\ub2e4.<\/em><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774 \ucffc\ub9ac\uc5d0 <code>ARRAY_AGG<\/code>. \uac01 \ud658\uc790\uc5d0 \ub300\ud574 \ud558\ub098\uc758 \ub808\ucf54\ub4dc\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc5d0 <code>ARRAY_AGG<\/code> \ubc0f <code>\uadf8\ub8f9 \uae30\uc900<\/code>\uc774\uc81c \uac01 \uc758\uc0ac\uc5d0 \ub300\ud574 \ud558\ub098\uc758 \uae30\ub85d\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc740 \uc81c\uac00 \ub9cc\ub4e0 \uc0d8\ud50c \ub370\uc774\ud130 \uc138\ud2b8\uc5d0 \ub300\ud55c \uacb0\uacfc\uc758 \uc77c\ubd80\uc785\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/08\/07501-aggregate-grouping-n1ql.png\" alt=\"Aggregate grouping results in N1QL\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ubc84\ud0b7\uc744 \uc0dd\uc131\ud558\uace0 \uc0d8\ud50c \ub370\uc774\ud130\ub97c \uac00\uc838\uc624\ub294 \ubc88\uac70\ub85c\uc6c0\uc744 \uacaa\uace0 \uc2f6\uc9c0 \uc54a\ub2e4\uba74 <a href=\"https:\/\/query.pub.couchbase.com\/tutorial\/#1\">N1QL \ud29c\ud1a0\ub9ac\uc5bc \uc0cc\ub4dc\ubc15\uc2a4<\/a>. \uc5ec\uae30\uc5d0\ub294 \ud658\uc790 \ubb38\uc11c\uac00 \uc5c6\uc73c\ubbc0\ub85c \ucffc\ub9ac\uac00 \uc57d\uac04 \ub2ec\ub77c\uc9d1\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774\uba54\uc77c\uc744 \uc5f0\ub839\ubcc4\ub85c \uadf8\ub8f9\ud654\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uba3c\uc800 \uac01 \ubb38\uc11c\uc5d0\uc11c \uc5f0\ub839\uc744 \uc120\ud0dd\ud558\uace0 \uac01 \ubb38\uc11c\uc5d0\uc11c \uc774\uba54\uc77c\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4. \uadf8\ub7f0 \ub2e4\uc74c <code>ARRAY_AGG<\/code> \uc744 \uc774\uba54\uc77c\uc5d0 \ucd94\uac00\ud569\ub2c8\ub2e4. \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uacb0\uacfc\ub97c \uc5f0\ub839\ubcc4\ub85c \uadf8\ub8f9\ud654\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\">SELECT t.age AS age, ARRAY_AGG(t.email) AS emails\r\nFROM tutorial t\r\ngroup by t.age;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc740 \uc0cc\ub4dc\ubc15\uc2a4 \uacb0\uacfc\uc758 \uc77c\ubd80 \uc2a4\ud06c\ub9b0\uc0f7\uc785\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/08\/07503-n1ql-sandbox.png\" alt=\"N1QL sandbox results\" \/><\/span><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_aggregate_group_with_mapreduce\">MapReduce\ub97c \uc0ac\uc6a9\ud55c \uadf8\ub8f9 \uc9d1\uacc4<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\ub9f5\ub9ac\ub4c0\uc2a4 \ubdf0\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc720\uc0ac\ud55c \uc9d1\uacc4 \uadf8\ub8f9\ud654\ub97c \uc218\ud589\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uba3c\uc800 \uc0c8 \ubcf4\uae30\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. Couchbase \ucf58\uc194\uc5d0\uc11c \uc778\ub371\uc2a4\ub85c \uc774\ub3d9\ud55c \ub2e4\uc74c \ubdf0\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4. \"\ud658\uc790\" \ubc84\ud0b7\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4. \"\uac1c\ubc1c \ubdf0 \ub9cc\ub4e4\uae30\"\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4. \ub514\uc790\uc778 \ubb38\uc11c\uc758 \uc774\ub984\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4(\uc800\ub294 \"_design\/dev_patient\"\ub77c\uace0 \ud569\ub2c8\ub2e4. \ubdf0\ub97c \ub9cc\ub4ed\ub2c8\ub2e4(\uc800\ub294 \"doctorPatientGroup\"\uc774\ub77c\uace0 \ud569\ub2c8\ub2e4).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc9c0\ub3c4\uc640 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ucd95\uc18c \ud568\uc218\uac00 \ubaa8\ub450 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uba3c\uc800 \ub9f5\uc758 \uacbd\uc6b0, \uc758\uc0ac ID(\uadf8\ub8f9\ud654\ub97c \uc0ac\uc6a9\ud560 \uac83\uc774\ubbc0\ub85c \ubc30\uc5f4\ub85c)\uc640 \ud658\uc790\uc758 \ubb38\uc11c ID\ub9cc \uc788\uc73c\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">function (doc, meta) {\r\n    emit([doc.doctorId], meta.id);\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub2e4\uc74c\uc73c\ub85c, \ucd95\uc18c \ud568\uc218\uc758 \uacbd\uc6b0 \uac12\uc744 \uac00\uc838\uc640 \ubc30\uc5f4\ub85c \uc5f0\uacb0\ud569\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \uc774\ub97c \uc218\ud589\ud560 \uc218 \uc788\ub294 \ud55c \uac00\uc9c0 \ubc29\ubc95\uc785\ub2c8\ub2e4. \uc800\ub294 \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 \uc804\ubb38\uac00\ub098 MapReduce \uc804\ubb38\uac00\uac00 \uc544\ub2c8\ubbc0\ub85c \ub354 \ud6a8\uc728\uc801\uc778 \ubc29\ubc95\uc774 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">function reduce(key, values, rereduce) {\r\n    var merged = [].concat.apply([], values);\r\n    return merged;\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub9f5\uacfc \ucd95\uc18c \ud568\uc218\ub97c \ubaa8\ub450 \uc0dd\uc131\ud55c \ud6c4 \uc0c9\uc778\uc744 \uc800\uc7a5\ud569\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc774 \uc778\ub371\uc2a4\ub97c \uc2e4\uc81c\ub85c \ud638\ucd9c\ud560 \ub54c \uadf8\ub8f9 \ub808\ubca8\uc744 1\ub85c \uc124\uc815\ud569\ub2c8\ub2e4. UI\uc5d0\uc11c \uc774 \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/08\/07502-aggregate-grouping-mapreduce.png\" alt=\"Aggregate grouping with MapReduce\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ub610\ub294 \uc778\ub371\uc2a4 URL\uc5d0\uc11c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \uc81c \ub85c\uceec \ucef4\ud4e8\ud130\uc5d0\uc11c \uc2e4\ud589 \uc911\uc778 \ud074\ub7ec\uc2a4\ud130\uc758 \uc608\uc785\ub2c8\ub2e4:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">https:\/\/127.0.0.1:8092\/patients\/_design\/dev_patients\/_view\/doctorPatientGroup?connection_timeout=60000&amp;full_set=true&amp;group_level=1&amp;inclusive_end=true&amp;skip=0&amp;stale=false<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ud574\ub2f9 \ubdf0\uc758 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc544\uc57c \ud569\ub2c8\ub2e4(\ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0 \ubcf4\uae30 \uc88b\uac8c \uc798\ub77c\ub0b8 \ubaa8\uc2b5):<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\">{\"rows\":[\r\n{\"key\":[0],\"value\":[\"reo8th6f\",\"g53x9e8d\", ... ]},\r\n{\"key\":[1],\"value\":[\"k4xkhmki\",\"g1jtc0oj\", ... ]},\r\n{\"key\":[2],\"value\":[\"spp6gf3k\",\"3z93wyan\"]},\r\n{\"key\":[3],\"value\":[\"qnx93fh3\",\"gssusiun\", ...]},\r\n{\"key\":[4],\"value\":[\"qvqgb0ve\",\"jm0g69zz\", ...]},\r\n{\"key\":[5],\"value\":[\"ywjfvad6\",\"so4uznxx\", ...]}\r\n...\r\n]}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_summary\">\uc694\uc57d<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>N1QL \ubc29\ubc95\uc774 \ub354 \uc27d\ub2e4\uace0 \uc0dd\uac01\ud558\uc9c0\ub9cc \uacbd\uc6b0\uc5d0 \ub530\ub77c\uc11c\ub294 MapReduce\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc131\ub2a5\uc0c1 \uc774\uc810\uc774 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub450 \uacbd\uc6b0 \ubaa8\ub450 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c \uc27d\uac8c(\ub354 \uc27d\uc9c0\ub294 \uc54a\ub354\ub77c\ub3c4) \uc9d1\uacc4 \uadf8\ub8f9\ud654\ub97c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>N1QL\uc5d0 \ub300\ud574 \ub354 \uc790\uc138\ud788 \uc54c\uace0 \uc2f6\uc73c\uc2e0\uac00\uc694? \ub2e4\uc74c\uc744 \ud655\uc778\ud574 \ubcf4\uc138\uc694. <a href=\"https:\/\/query.pub.couchbase.com\/tutorial\/#1\">\uc804\uccb4 N1QL \ud29c\ud1a0\ub9ac\uc5bc\/\uc0cc\ub4dc\ubc15\uc2a4<\/a>. MapReduce \ubcf4\uae30\uc5d0 \uad00\uc2ec\uc774 \uc788\uc73c\uc2e0\uac00\uc694? \ub9f5\ub9ac\ub4c0\uc2a4\uc758 <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/sdk\/dotnet\/view-queries-with-sdk.html\">\ub9f5\ub9ac\ub4c0\uc2a4 \ubdf0 \ubb38\uc11c<\/a> \ub97c \ud074\ub9ad\ud558\uc5ec \uc2dc\uc791\ud558\uc138\uc694.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\uc774 \uac8c\uc2dc\ubb3c\uc774 \uc720\uc6a9\ud588\ub098\uc694? \uac1c\uc120\ud560 \uc810\uc774 \uc788\uc73c\uc2e0\uac00\uc694? \uc544\ub798\uc5d0 \ub313\uae00\uc744 \ub0a8\uae30\uac70\ub098 \ub2e4\uc74c \uc5f0\ub77d\ucc98\ub85c \ubb38\uc758\ud574 \uc8fc\uc138\uc694. <a href=\"https:\/\/twitter.com\/mgroves\">\ud2b8\uc704\ud130 @mgroves<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Aggregate grouping is what I\u2019m titling this blog post, but I don\u2019t know if it\u2019s the best name. Have you ever used MySQL\u2019s GROUP_CONCAT function or the FOR XML PATH(&#8221;) workaround in SQL Server? That\u2019s basically what I\u2019m writing about [&hellip;]<\/p>","protected":false},"author":71,"featured_media":3956,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1816,1819,1812],"tags":[2041,2042],"ppma_author":[8937],"class_list":["post-3955","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-couchbase-server","category-data-modeling","category-n1ql-query","tag-aggregation","tag-grouping"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Aggregate grouping with N1QL \/ MapReduce - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Aggregate grouping (similar to GROUP_CONCAT) can be done in Couchbase Server with N1QL&#039;s ARRAY_AGG or with a MapReduce View.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/ko\/aggregate-grouping-n1ql-mapreduce\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Aggregate grouping with N1QL \/ MapReduce\" \/>\n<meta property=\"og:description\" content=\"Aggregate grouping (similar to GROUP_CONCAT) can be done in Couchbase Server with N1QL&#039;s ARRAY_AGG or with a MapReduce View.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/aggregate-grouping-n1ql-mapreduce\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-08-22T17:00:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T00:32:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/075-hero-aggregate-grouping.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"731\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Aggregate grouping with N1QL \/ MapReduce\",\"datePublished\":\"2017-08-22T17:00:34+00:00\",\"dateModified\":\"2025-06-14T00:32:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/\"},\"wordCount\":901,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/075-hero-aggregate-grouping.jpg\",\"keywords\":[\"aggregation\",\"grouping\"],\"articleSection\":[\"Application Design\",\"Couchbase Server\",\"Data Modeling\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/\",\"name\":\"Aggregate grouping with N1QL \/ MapReduce - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/075-hero-aggregate-grouping.jpg\",\"datePublished\":\"2017-08-22T17:00:34+00:00\",\"dateModified\":\"2025-06-14T00:32:59+00:00\",\"description\":\"Aggregate grouping (similar to GROUP_CONCAT) can be done in Couchbase Server with N1QL's ARRAY_AGG or with a MapReduce View.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/075-hero-aggregate-grouping.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/075-hero-aggregate-grouping.jpg\",\"width\":1280,\"height\":731,\"caption\":\"Aggregate grouping - licensed through Creative Commons https:\/\/commons.wikimedia.org\/wiki\/File:Spices_of_Sa%C3%BAde_flea_market,_S%C3%A3o_Paulo,_Brazil.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Aggregate grouping with N1QL \/ MapReduce\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Aggregate grouping with N1QL \/ MapReduce - The Couchbase Blog","description":"Aggregate grouping (similar to GROUP_CONCAT) can be done in Couchbase Server with N1QL's ARRAY_AGG or with a MapReduce View.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/ko\/aggregate-grouping-n1ql-mapreduce\/","og_locale":"ko_KR","og_type":"article","og_title":"Aggregate grouping with N1QL \/ MapReduce","og_description":"Aggregate grouping (similar to GROUP_CONCAT) can be done in Couchbase Server with N1QL's ARRAY_AGG or with a MapReduce View.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/aggregate-grouping-n1ql-mapreduce\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-08-22T17:00:34+00:00","article_modified_time":"2025-06-14T00:32:59+00:00","og_image":[{"width":1280,"height":731,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/075-hero-aggregate-grouping.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Aggregate grouping with N1QL \/ MapReduce","datePublished":"2017-08-22T17:00:34+00:00","dateModified":"2025-06-14T00:32:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/"},"wordCount":901,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/075-hero-aggregate-grouping.jpg","keywords":["aggregation","grouping"],"articleSection":["Application Design","Couchbase Server","Data Modeling","SQL++ \/ N1QL Query"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/","url":"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/","name":"Aggregate grouping with N1QL \/ MapReduce - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/075-hero-aggregate-grouping.jpg","datePublished":"2017-08-22T17:00:34+00:00","dateModified":"2025-06-14T00:32:59+00:00","description":"Aggregate grouping (similar to GROUP_CONCAT) can be done in Couchbase Server with N1QL's ARRAY_AGG or with a MapReduce View.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/075-hero-aggregate-grouping.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/075-hero-aggregate-grouping.jpg","width":1280,"height":731,"caption":"Aggregate grouping - licensed through Creative Commons https:\/\/commons.wikimedia.org\/wiki\/File:Spices_of_Sa%C3%BAde_flea_market,_S%C3%A3o_Paulo,_Brazil.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/aggregate-grouping-n1ql-mapreduce\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Aggregate grouping with N1QL \/ MapReduce"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"\ub9e4\ud29c \uadf8\ub85c\ube0c\uc2a4","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"Matthew D. Groves\ub294 \ucf54\ub529\uc744 \uc88b\uc544\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4. C#, jQuery, PHP \ub4f1 \ubb34\uc5c7\uc774\ub4e0 \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub97c \uc81c\ucd9c\ud560 \uc815\ub3c4\ub85c \ucf54\ub529\uc744 \uc88b\uc544\ud569\ub2c8\ub2e4. 90\ub144\ub300\uc5d0 \ubd80\ubaa8\ub2d8\uc758 \ud53c\uc790 \uac00\uac8c\ub97c \uc704\ud574 QuickBASIC POS \uc571\uc744 \ub9cc\ub4e0 \uc774\ud6c4\ub85c \uc804\ubb38\uc801\uc73c\ub85c \ucf54\ub529\uc744 \ud574\uc654\uc2b5\ub2c8\ub2e4. \ud604\uc7ac Couchbase\uc758 \uc120\uc784 \uc81c\ud488 \ub9c8\ucf00\ud305 \uad00\ub9ac\uc790\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uac00 \uc2dc\uac04\uc5d0\ub294 \uac00\uc871\uacfc \ud568\uaed8 \ucd95\uad6c \uacbd\uae30\ub97c \uad00\ub78c\ud558\uace0 \uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0\uc5d0 \ucc38\uc5ec\ud558\uba70 \uc2dc\uac04\uc744 \ubcf4\ub0c5\ub2c8\ub2e4. \uadf8\ub294 .NET\uc758 AOP, .NET\uc758 \ud504\ub85c \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4, Pluralsight \uc800\uc790, Microsoft MVP\uc758 \uc800\uc790\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"Matthew D. Groves\ub294 \ucf54\ub529\uc744 \uc88b\uc544\ud558\ub294 \uc0ac\ub78c\uc785\ub2c8\ub2e4.  C#, jQuery, PHP \ub4f1 \ubb34\uc5c7\uc774\ub4e0 \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub97c \uc81c\ucd9c\ud560 \uc815\ub3c4\ub85c \ucf54\ub529\uc744 \uc88b\uc544\ud569\ub2c8\ub2e4.  90\ub144\ub300\uc5d0 \ubd80\ubaa8\ub2d8\uc758 \ud53c\uc790 \uac00\uac8c\ub97c \uc704\ud574 QuickBASIC POS \uc571\uc744 \ub9cc\ub4e0 \uc774\ud6c4\ub85c \uc804\ubb38\uc801\uc73c\ub85c \ucf54\ub529\uc744 \ud574\uc654\uc2b5\ub2c8\ub2e4.  \ud604\uc7ac Couchbase\uc758 \uc120\uc784 \uc81c\ud488 \ub9c8\ucf00\ud305 \uad00\ub9ac\uc790\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uac00 \uc2dc\uac04\uc5d0\ub294 \uac00\uc871\uacfc \ud568\uaed8 \ucd95\uad6c \uacbd\uae30\ub97c \uad00\ub78c\ud558\uace0 \uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0\uc5d0 \ucc38\uc5ec\ud558\uba70 \uc2dc\uac04\uc744 \ubcf4\ub0c5\ub2c8\ub2e4.  \uadf8\ub294 .NET\uc758 AOP, .NET\uc758 \ud504\ub85c \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4, Pluralsight \uc800\uc790, Microsoft MVP\uc758 \uc800\uc790\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/3955","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=3955"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/3955\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/3956"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=3955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=3955"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=3955"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=3955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}