MongoDB - Query์—์„œ ๋ฐ˜ํ™˜ํ•  projectjon field
728x90

๐Ÿ’ก MongoDB ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.

์ฐธ๊ณ  : https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/

 

Project Fields to Return from Query — MongoDB Manual

Docs Home → MongoDB Manualโžค Use the Select your language drop-down menu in the upper-right to set the language of the following examples.By default, queries in MongoDB return all fields in matching documents. To limit the amount of data that MongoDB se

docs.mongodb.com

 

Query์—์„œ ๋ฐ˜ํ™˜ํ•  ํ”„๋กœ์ ํŠธ field

inventory collection ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ˆ์ œ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

db.inventory.insertMany( [
  { item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },
  { item: "notebook", status: "A",  size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },
  { item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },
  { item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },
  { item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);

๊ธฐ๋ณธ์ ์œผ๋กœ MongoDB์˜ ์ฟผ๋ฆฌ๋Š” ์ผ์น˜ํ•˜๋Š” document์˜ ๋ชจ๋“  field๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. MongoDB๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด projection document๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•  field๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

projection ๊ฐœ๋… ์ฐธ์กฐ : http://www.gurubee.net/lecture/2176

 

SELECT ๊ธฐ์ดˆ

  SELECT ๋ฌธ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค. SELECT ๋ฌธ์„ ์ด์šฉํ•ด ์งˆ์˜ํ•  ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜..

www.gurubee.net

 

์ผ์น˜ํ•˜๋Š” document์˜ ๋ชจ๋“  field ๋ฐ˜ํ™˜

  • ex) status : “A”์— ์ผ์น˜ํ•˜๋Š” inventory collection์˜ ๋ชจ๋“  document์—์„œ ๋ชจ๋“  field๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Mongodb shell

db.inventory.find( { status: "A" } )

SQL

SELECT * from inventory WHERE status = "A"

 

์ง€์ •๋œ field ๋ฐ _id field๋งŒ ๋ฐ˜ํ™˜

  • ex) item, status ๊ทธ๋ฆฌ๊ณ  _id field๋งŒ ์ผ์น˜ํ•˜๋Š” document๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )

SQL

SELECT _id, item, status from inventory WHERE status = "A"

 

  • _id ํ•„๋“œ ์–ต์ œ
    • ex) ํ”„๋กœ์ ์…˜์—์„œ _id ํ•„๋“œ๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๊ฒฐ๊ณผ์—์„œ ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.
db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )

SQL

SELECT _id, item, status from inventory WHERE status = "A"
Memo
: _id ํ•„๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ  projection document์— ํฌํ•จ ๋ฐ ์ œ์™ธ๋ฌธ์„ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์—†๋‹ค.

 

์ œ์™ธ๋œ field๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํ•ญ๋ชฉ ๋ฐ˜ํ™˜

์ผ์น˜ํ•˜๋Š” document์—์„œ ๋ฐ˜ํ™˜ํ•  field๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๋Œ€์‹  projection์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํ•„๋“œ๋ฅผ ์ œ์™ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ex) ์ผ์น˜ํ•˜๋Š” document์˜ status: “A”์— ํ•ด๋‹นํ•˜์ง€๋งŒ status์™€ instock์„ ์ œ์™ธํ•œ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 ํฌํ•จ๋œ document์˜ ํŠน์ • field ๋ฐ˜ํ™˜

ํฌํ•จ๋œ document์˜ ํŠน์ • field๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. dot notation(์  ํ‘œ๊ธฐ๋ฒ•)์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌํ•จ๋œ ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  projection document์— 1๋กœ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.

  • ex) ๋ฐ˜ํ™˜ํ•˜๋Š” field : _id, item, status, size์˜ uom
db.inventory.find(
   { status: "A" },
   { item: 1, status: 1, "size.uom": 1 }
)

Memo :
MongoDB 4.4๋ถ€ํ„ฐ ์ค‘์ฒฉ ํ˜•์‹์„ ์‚ฌ์šฉํ•ด ํฌํ•จ๋œ field๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

ex) { item: 1, status: 1, size: { uom: 1 } }.

 

ํฌํ•จ๋œ document์—์„œ ํŠน์ • field ์–ต์ œ

ํฌํ•จ๋œ document์—์„œ ํŠน์ • field๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. dot notation(์  ํ‘œ๊ธฐ๋ฒ•)์„ ์‚ฌ์šฉํ•ด projection document์— ํฌํ•จ๋œ ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  0์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

  • ex) uom์—์„œ size document ๋‚ด๋ถ€์˜ ํ•„๋“œ๋ฅผ ์ œ์™ธํ•˜๋„๋ก projection์„ ์ง€์ •ํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  field๋Š” ์ผ์น˜ํ•˜๋Š” document์— ๋ฐ˜ํ™˜๋œ๋‹ค.
db.inventory.find(
   { status: "A" },
   { "size.uom": 0 }
)

Memo :
MongoDB 4.4๋ถ€ํ„ฐ ์ค‘์ฒฉ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌํ•จ๋œ field๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

ex) :{ size: { uom: 0 } }

 

๋ฐฐ์—ด์— ํฌํ•จ๋œ document์— ๋Œ€ํ•œ projection

dot notation(์  ํ‘œ๊ธฐ๋ฒ•)์„ ์‚ฌ์šฉํ•ด ํฌํ•จ๋œ document ๋‚ด๋ถ€์˜ ํŠน์ • field๋ฅผ projectionํ•œ๋‹ค.

  • ex) ๋ฐ˜ํ™˜ํ•  projection ์ง€์ • → _id, item, status, instock ๋ฐฐ์—ด์— ํฌํ•จ๋œ qty ํ•„๋“œ
db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )

 

 

๋ฐ˜ํ™˜๋œ ๋ฐฐ์—ด์˜ ํŠน์ • ๋ฐฐ์—ด ์š”์†Œ๋ฅผ projection

๋ฐฐ์—ด์„ ํฌํ•จํ•˜๋Š” field์˜ ๊ฒฝ์šฐ, MongoDB๋Š” ๋ฐฐ์—ด ์กฐ์ž‘์„ ์œ„ํ•ด $eleMatch, $slice, $์™€ ๊ฐ™์€ ํ”„๋กœ์ ์…˜ ์—ฐ์‚ฐ์ž๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • ex) $slice projection ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด instock ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
db.inventory.find( { status: "A" }, { item: 1, status: 1, instock: { $slice: -1 } } )

Memo :
$eleMatch, $slice, $๋Š” ๋ฐ˜ํ™˜๋œ ๋ฐฐ์—ด์— ํฌํ•จํ•œ ํŠน์ • ์š”์†Œ๋ฅผ projectionํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ํˆฌ์˜ํ•  ์ˆ˜ ์—†๋‹ค.

ex) { "instock.0": 1 } projection์€ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์„ projection ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•