Docs Menu

$out (์ง‘๊ณ„)

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ

$out

์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ฐ˜ํ™˜๋œ ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ง€์ •๋œ ์ปฌ๋ ‰์…˜์— ์”๋‹ˆ๋‹ค. ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$out ๋‹จ๊ณ„๋Š” ํŒŒ์ดํ”„๋ผ์ธ ์˜ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„ ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. $out ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ๊ทธ๋ฆฌ๊ฒŒ์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋ชจ๋“  ํฌ๊ธฐ์˜ ๊ฒฐ๊ณผ ์„ธํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$out ๋‹จ๊ณ„์˜ ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • $out ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ถœ๋ ฅ ์ปฌ๋ ‰์…˜์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    { $out: { db: "<output-db>", coll: "<output-collection>" } }
    ํ•„๋“œ
    ์„ค๋ช…

    ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

    ์ถœ๋ ฅ collection ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

  • $out ์ถœ๋ ฅ collection๋งŒ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ collection์œผ๋กœ ์ถœ๋ ฅ).

    { $out: "<output-collection>" } // Output collection is in the same database

์ค‘์š”

  • ์ƒค๋“œ๋œ ์ปฌ๋ ‰์…˜์€ ์ถœ๋ ฅ ์ปฌ๋ ‰์…˜์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ž…๋ ฅ ์ปฌ๋ ‰์…˜์€ ์ƒค๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒค๋“œ๋œ ์ปฌ๋ ‰์…˜์œผ๋กœ ์ถœ๋ ฅํ•˜๋ ค๋ฉด $merge(MongoDB 4.2๋ถ€ํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

  • $out ์—ฐ์‚ฐ์ž๋Š” ๊ณ ์ • ์‚ฌ์ด์ฆˆ ์ปฌ๋ ‰์…˜์— ๊ฒฐ๊ณผ๋ฅผ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • Atlas Search ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ์ปฌ๋ ‰์…˜์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๋จผ์ € ๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค๋ฅผ ์‚ญ์ œํ•œ ํ›„ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  $merge ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•ด ๋ณด์„ธ์š”.

๋ฒ„์ „ 4.2 ์— $merge ๊ฐ€ ๋„์ž…๋˜๋ฉด์„œ, MongoDB๋Š” ์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ปฌ๋ ‰์…˜์— ์“ฐ๊ธฐ ์œ„ํ•ด $merge ๋ฐ $out ๋‘ ๋‹จ๊ณ„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋‘ ๋‹จ๊ณ„์˜ ๊ธฐ๋Šฅ์„ ์š”์•ฝํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปฌ๋ ‰์…˜์œผ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปฌ๋ ‰์…˜์œผ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ถœ๋ ฅ ์ปฌ๋ ‰์…˜์ด ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ƒˆ ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ์ถœ๋ ฅ ์ปฌ๋ ‰์…˜์ด ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ƒˆ ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ์ถœ๋ ฅ ์ปฌ๋ ‰์…˜์ด ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ ์™„์ „ํžˆ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • ๊ฒฐ๊ณผ(์ƒˆ ๋ฌธ์„œ ์‚ฝ์ž…, ๋ฌธ์„œ ๋ณ‘ํ•ฉ, ๋ฌธ์„œ ๊ต์ฒด, ๊ธฐ์กด ๋ฌธ์„œ ์œ ์ง€, ์ž‘์—… ์‹คํŒจ, ์‚ฌ์šฉ์ž ์ง€์ • ์—…๋ฐ์ดํŠธ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋ฌธ์„œ ์ฒ˜๋ฆฌ)๋ฅผ ๊ธฐ์กด ์ปฌ๋ ‰์…˜์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    collection์˜ ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ง€๋งŒ ์ง‘๊ณ„ ๊ฒฐ๊ณผ์— collection์˜ ๋ชจ๋“  ๊ธฐ์กด ๋ฌธ์„œ์™€ ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ์ถœ๋ ฅ ๋Œ€์ƒ ์ปฌ๋ ‰์…˜์€ ์ƒค๋”ฉ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž…๋ ฅ ์ปฌ๋ ‰์…˜์€ ์ƒค๋”ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒค๋“œ๋œ ์ปฌ๋ ‰์…˜์œผ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ ์ปฌ๋ ‰์…˜๋„ ์ƒค๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹ค์Œ SQL ๋ฌธ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

    • INSERT INTO T2 SELECT * FROM T1
    • SELECT * INTO T2 FROM T1
  • ๋‹ค์Œ SQL ๋ฌธ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

    • MERGE T2 AS TARGET
      USING (SELECT * FROM T1) AS SOURCE
      ON MATCH (T2.ID = SOURCE.ID)
      WHEN MATCHED THEN
      UPDATE SET TARGET.FIELDX = SOURCE.FIELDY
      WHEN NOT MATCHED THEN
      INSERT (FIELDX)
      VALUES (SOURCE.FIELDY)
    • ๊ตฌ์ฒดํ™”๋œ ๋ทฐ ๋งŒ๋“ค๊ธฐ/์ƒˆ๋กœ ๊ณ ์นจ

MongoDB ๋ถ€ํ„ฐ ํด๋Ÿฌ์Šคํ„ฐ์˜ 5.0 $out ๋ชจ๋“  ๋…ธ๋“œ์— featureCompatibilityVersion 5.0 ์ด ์ด์ƒ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ณ  ์ฝ๊ธฐ ๊ธฐ๋ณธ ์„ค์ • ์ด ์„ธ์ปจ๋”๋ฆฌ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ ์„ธํŠธ ์„ธ์ปจ๋”๋ฆฌ ๋…ธ๋“œ์—์„œ ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$out ๋ฌธ์˜ ์ฝ๊ธฐ ์ž‘์—…์€ ์„ธ์ปจ๋”๋ฆฌ ๋…ธ๋“œ์—์„œ ๋ฐœ์ƒํ•˜์ง€๋งŒ ์“ฐ๊ธฐ ์ž‘์—…์€ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋…ธ๋“œ์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋“œ๋ผ์ด๋ฒ„ ๋ฒ„์ „์ด ๋ณต์ œ๋ณธ ์„ธํŠธ ์„ธ์ปจ๋”๋ฆฌ ๋…ธ๋“œ์— ๋Œ€ํ•œ $out ์ž‘์—… ๋Œ€์ƒ ์ง€์ •์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„ ์„ค๋ช…์„œ๋ฅผ ํ™•์ธํ•˜์—ฌ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์„ธ์ปจ๋”๋ฆฌ์—์„œ ์‹คํ–‰ ์ค‘์ธ $out ์— ๋Œ€ํ•œ ์ง€์›์„ ์–ธ์ œ ์ถ”๊ฐ€ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

$out ์ž‘์—…์€ ์ปฌ๋ ‰์…˜์ด ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ƒˆ ์ปฌ๋ ‰์…˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ง‘๊ณ„๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ collection์€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง‘๊ณ„์ด ์‹คํŒจํ•˜๋ฉด MongoDB๋Š” collection์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

$out ์—ฐ์‚ฐ์—์„œ ์ง€์ •ํ•œ ์ปฌ๋ ‰์…˜์ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ, ์• ๊ทธ๋ฆฌ๊ฒŒ์ด์…˜์ด ์™„๋ฃŒ๋˜๋ฉด $out ๋‹จ๊ณ„์—์„œ ๊ธฐ์กด ์ปฌ๋ ‰์…˜์„ ์ƒˆ ๊ฒฐ๊ณผ ์ปฌ๋ ‰์…˜์œผ๋กœ ์›์ž์ ์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ $out ์—ฐ์‚ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์ž„์‹œ ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ธฐ์กด collection์˜ ์ธ๋ฑ์Šค๋ฅผ ์ž„์‹œ collection์œผ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  3. ์ž„์‹œ ์ปฌ๋ ‰์…˜์— ๋ฌธ์„œ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

  4. dropTarget: true์™€ ํ•จ๊ป˜ renameCollection ๋ช…๋ น์„ ํ˜ธ์ถœํ•ด ์ž„์‹œ ์ปฌ๋ ‰์…˜์˜ ์ด๋ฆ„์„ ๋Œ€์ƒ ์ปฌ๋ ‰์…˜์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

$out ์ž‘์—…์€ ์ด์ „ ์ปฌ๋ ‰์…˜์— ์žˆ๋˜ ์ธ๋ฑ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์• ๊ทธ๋ฆฌ๊ฒŒ์ด์…˜์ด ์‹คํŒจํ•˜๋ฉด $out ์ž‘์—…์€ ๊ธฐ์กด ์ปฌ๋ ‰์…˜์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

coll ์ปฌ๋ ‰์…˜์—์„œ ์Šคํ‚ค๋งˆ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  validationAction์„ error๋กœ ์„ค์ •ํ•œ ๊ฒฝ์šฐ $out์œผ๋กœ ์ž˜๋ชป๋œ ๋ฌธ์„œ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. $out ์ž‘์—…์€ ๊ธฐ์กด ์ปฌ๋ ‰์…˜์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ฐ˜ํ™˜๋œ ๋ฌธ์„œ๋Š” coll ์ปฌ๋ ‰์…˜์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ƒ์„ฑํ•œ ๋ฌธ์„œ๊ฐ€ ์›๋ž˜ ์ถœ๋ ฅ ์ปฌ๋ ‰์…˜์˜ _id ํ•„๋“œ์— ์žˆ๋Š” ๊ณ ์œ  ์ธ๋ฑ์Šค๋ฅผ ๋น„๋กฏํ•ด ๊ทธ ์–ด๋–ค ๊ณ ์œ  ์ธ๋ฑ์Šค๋ผ๋„ ์œ„๋ฐ˜ํ•  ๊ฒฝ์šฐ ํŒŒ์ดํ”„๋ผ์ธ์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

$out ์ž‘์—…์œผ๋กœ Atlas Search ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ์ปฌ๋ ‰์…˜์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ Atlas Search ์ธ๋ฑ์Šค๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  $merge ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

$out ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•˜๋Š” "majority" ์ง‘๊ณ„์— ๋Œ€ํ•ด ์ฝ๊ธฐ ๊ณ ๋ ค ์ˆ˜์ค€์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋คํ”„ ํ”„๋กœ์„ธ์Šค ์ค‘์— ๋ฅผ ํฌํ•จํ•˜๋Š” ์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๋ฉด mongodump --oplog $out ๋กœ ์‹œ์ž‘๋œ ๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ mongodump --oplog ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ
์„ค๋ช…

์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.$out

์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ ๋ฅผ $out ์‚ฌ์šฉํ•˜์—ฌ time series ์ปฌ๋ ‰์…˜ ์œผ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

$out ๋‹จ๊ณ„๋Š” ๋ทฐ ์ •์˜์˜ ์ผ๋ถ€๋กœ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ทฐ ์ •์˜์— ์ค‘์ฒฉ๋œ ํŒŒ์ดํ”„๋ผ์ธ ํฌํ•จ๋œ ๊ฒฝ์šฐ(์˜ˆ: ๋ทฐ ์ •์˜์— $lookup ๋˜๋Š” $facet ๋‹จ๊ณ„๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ) ์ด $out ๋‹จ๊ณ„ ์ œํ•œ์€ ์ค‘์ฒฉ๋œ ํŒŒ์ดํ”„๋ผ์ธ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

$lookup ๋‹จ๊ณ„

๋ถ€ํ„ฐ๋Š” ๋‹จ๊ณ„์˜ 4.2 $lookup ์ค‘์ฒฉ๋œ $outํŒŒ์ดํ”„๋ผ์ธ ์— ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

$facet ๋‹จ๊ณ„

$facet ๋‹จ๊ณ„์˜ ์ค‘์ฒฉ๋œ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„๊ฐ€ ํฌํ•จ๋  ์ˆ˜ $out ์—†์Šต๋‹ˆ๋‹ค.

$unionWith ๋‹จ๊ณ„

$unionWith ๋‹จ๊ณ„์˜ ์ค‘์ฒฉ๋œ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„๊ฐ€ ํฌํ•จ๋  ์ˆ˜ $out ์—†์Šต๋‹ˆ๋‹ค.

"linearizable" readConcern

$out ๋‹จ๊ณ„๋Š” ์ฝ๊ธฐ ๊ณ ๋ ค "linearizable"์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, db.collection.aggregate()์—์„œ "linearizable" ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ง€์ •ํ•  ๊ฒฝ์šฐ ํŒŒ์ดํ”„๋ผ์ธ์— $out ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

test ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋‹ค์Œ ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉํ•ด ์ปฌ๋ ‰์…˜ books๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

db.getSiblingDB("test").books.insertMany([
{ "_id" : 8751, "title" : "The Banquet", "author" : "Dante", "copies" : 2 },
{ "_id" : 8752, "title" : "Divine Comedy", "author" : "Dante", "copies" : 1 },
{ "_id" : 8645, "title" : "Eclogues", "author" : "Dante", "copies" : 2 },
{ "_id" : 7000, "title" : "The Odyssey", "author" : "Homer", "copies" : 10 },
{ "_id" : 7020, "title" : "Iliad", "author" : "Homer", "copies" : 10 }
])

test ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์‚ฝ์ž… ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ books ์ปฌ๋ ‰์…˜์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ง‘๊ณ„ ์ž‘์—…์€ test ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ books collection์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ”ผ๋ฒ—ํ•˜์—ฌ ์ œ๋ชฉ์„ ์ €์ž๋ณ„๋กœ ๊ทธ๋ฃนํ™”ํ•œ ๋‹ค์Œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ test ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ authors collection์— ์”๋‹ˆ๋‹ค.

db.getSiblingDB("test").books.aggregate( [
{ $group : { _id : "$author", books: { $push: "$title" } } },
{ $out : "authors" }
] )
์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„ ($group):

$group ๋‹จ๊ณ„๋Š” authors๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  $push๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๋ชฉ์„ books ๋ฐฐ์—ด ํ•„๋“œ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

{ "_id" : "Dante", "books" : [ "The Banquet", "Divine Comedy", "Eclogues" ] }
{ "_id" : "Homer", "books" : [ "The Odyssey", "Iliad" ] }
๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„ ($out):
$out ๋‹จ๊ณ„๋Š” test ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ authors ์ปฌ๋ ‰์…˜์— ๋ฌธ์„œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ collection์˜ ๋ฌธ์„œ๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

db.getSiblingDB("test").authors.find()

์ปฌ๋ ‰์…˜์—๋Š” ๋‹ค์Œ ๋ฌธ์„œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

{ "_id" : "Homer", "books" : [ "The Odyssey", "Iliad" ] }
{ "_id" : "Dante", "books" : [ "The Banquet", "Divine Comedy", "Eclogues" ] }

์ฐธ๊ณ 

๋ณต์ œ๋ณธ ์„ธํŠธ ๋˜๋Š” ๋…๋ฆฝํ˜•์˜ ๊ฒฝ์šฐ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—†์œผ๋ฉด $out๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฒฝ์šฐ ์ง€์ •๋œ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$out ๋Š” ์ง‘๊ณ„๊ฐ€ ์‹คํ–‰๋˜๋Š” ์œ„์น˜์™€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปฌ๋ ‰์…˜์œผ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์ง‘๊ณ„ ์ž‘์—…์€ books ์ปฌ๋ ‰์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ”ผ๋ฒ—ํ•˜์—ฌ ์ œ๋ชฉ์ด ์ž‘์„ฑ์ž๋ณ„๋กœ ๊ทธ๋ฃนํ™”ํ•œ ๋‹ค์Œ reporting ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ authors ์ปฌ๋ ‰์…˜์— ๊ฒฐ๊ณผ๋ฅผ ์”๋‹ˆ๋‹ค.

db.getSiblingDB("test").books.aggregate( [
{ $group : { _id : "$author", books: { $push: "$title" } } },
{ $out : { db: "reporting", coll: "authors" } }
] )
์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„ ($group):

$group ๋‹จ๊ณ„๋Š” authors๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  $push๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๋ชฉ์„ books ๋ฐฐ์—ด ํ•„๋“œ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

{ "_id" : "Dante", "books" : [ "The Banquet", "Divine Comedy", "Eclogues" ] }
{ "_id" : "Homer", "books" : [ "The Odyssey", "Iliad" ] }
๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„ ($out):
$out ๋‹จ๊ณ„๋Š” reporting ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ authors ์ปฌ๋ ‰์…˜์— ๋ฌธ์„œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ collection์˜ ๋ฌธ์„œ๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

db.getSiblingDB("reporting").authors.find()

์ปฌ๋ ‰์…˜์—๋Š” ๋‹ค์Œ ๋ฌธ์„œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

{ "_id" : "Homer", "books" : [ "The Odyssey", "Iliad" ] }
{ "_id" : "Dante", "books" : [ "The Banquet", "Divine Comedy", "Eclogues" ] }

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ