MongoDB - ๋ฐฐ์—ด ์ฟผ๋ฆฌ - (1)
728x90

์ฐธ๊ณ  : https://docs.mongodb.com/manual/tutorial/query-arrays/

๋ฐฐ์—ด ์ฟผ๋ฆฌ

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 } ] }
]);
  • ๋ฐฐ์—ด ์ผ์น˜
    • ๋ฐฐ์—ด์— ํ‰๋“ฑ ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๋ ค๋ฉด ์ฟผ๋ฆฌ ๋ฌธ์„œ ์‚ฌ์šฉ ์š”์†Œ์˜ ์ˆœ์„œ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฐฐ์—ด์— ๋งค์น˜๋˜๋Š” ์ •ํ™•ํ•œ document์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ex) “red”, “blank”๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ๋ฐฐ์—ด์„ ์ฐพ๊ณ  ์‹ถ๋‹ค๋ฉด $all ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • db.inventory.find( { tags: ["red", "blank"] } )
    • db.inventory.find( { tags: { $all: ["red", "blank"] } } )
    • ex) ํ•„๋“œ tags ์˜ value์ธ [”red”, “blank”] ๋ฐฐ์—ด์„ ๊ฒ€์ƒ‰
  • ์š”์†Œ์— ๋Œ€ํ•œ ๋ฐฐ์—ด ์ฟผ๋ฆฌ
    • ๋ฐฐ์—ด ํ•„๋“œ๊ฐ€ ์ ์–ด๋„ 1๊ฐœ์˜ ์ง€์ •๋œ ๊ฐ’์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ฟผ๋ฆฌํ•˜๋ ค๋ฉด { : } ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
      db.inventory.find( { tags: "red" } )
      ๋ฐฐ์—ด ํ•„๋“œ์˜ ์š”์†Œ์— ๋Œ€ํ•œ ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๋ ค๋ฉดex) ๋ฐฐ์—ด dim_cm์— 25๋ณด๋‹ค ํฐ ์š”์†Œ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จ๋œ ๋ชจ๋“  document๋ฅผ ์„ ํƒํ•œ๋‹ค. → $gt ์‚ฌ์šฉ
    • db.inventory.find( { dim_cm: { $gt: 25 } } )
    • { <array field>: { <operator1>: <value1>, ... } }
    • ex) ํƒœ๊ทธ๊ฐ€ "red" ๋ฌธ์ž์—ด์„ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋กœ ํฌํ•จํ•˜๋Š” ๋ฐฐ์—ด์ธ ๋ชจ๋“  document๋ฅผ ์„ ํƒํ•œ๋‹ค.
  • ๋ฐฐ์—ด ์š”์†Œ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ์กฐ๊ฑด ์ง€์ •
    • ๋ฐฐ์—ด ์š”์†Œ์— ๋ณตํ•ฉ ์กฐ๊ฑด์„ ์ง€์ •ํ•  ๋•Œ๋ฐฐ์—ด ์š”์†Œ์˜ ์กฐํ•ฉ์ด ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋„๋ก
    • ์ฟผ๋ฆฌ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹จ์ผ ๋ฐฐ์—ด ์š”์†Œ๊ฐ€ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๊ฑฐ๋‚˜
    • ๋ฐฐ์—ด ์š”์†Œ์— ๋Œ€ํ•œ ๋ณตํ•ฉ ํ•„ํ„ฐ ์กฐ๊ฑด์œผ๋กœ ๋ฐฐ์—ด ์ฟผ๋ฆฌex) dim_cm ๋ฐฐ์—ด์— ํ•œ ์š”์†Œ๋Š” 15๋ณด๋‹ค ํฌ๊ณ  20 ๋ณด๋‹ค๋Š” ์ž‘์€ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋ฉด
    • db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
    • ๋‹ค์Œ ์˜ˆ์ œ์—์„œ๋Š” dim_cm ๋ฐฐ์—ด์ด ์ฟผ๋ฆฌ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ํฌํ•จ๋œ document๋ฅผ ์ฟผ๋ฆฌํ•œ๋‹ค.

  • ์—ฌ๋Ÿฌ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜๋Š” ๋ฐฐ์—ด ์š”์†Œ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ
    $eleMatch๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฐฐ์—ด ์š”์†Œ๊ฐ€ ์ง€์ •๋œ ๋ชจ๋“  ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜๋„๋ก ๋ฐฐ์—ด ์š”์†Œ์— ์—ฌ๋Ÿฌ ๊ธฐ์ค€์„ ์ง€์ •ํ•œ๋‹ค.
    db.inventory.find( { dim_cm: { **$elemMatch**: { $gt: 22, $lt: 30 } } } )
  • ex) dim_cm ๋ฐฐ์—ด์— ($gt) 22๋ณด๋‹ค ํฌ๊ณ  ($lt) 30๋ณด๋‹ค ์ž‘์€ ์š”์†Œ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
  • ๋ฐฐ์—ด ์ธ๋ฑ์Šค ์œ„์น˜๋กœ ์š”์†Œ ์ฟผ๋ฆฌ
    • ์  ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์˜ ํŠน์ • ์ธ๋ฑ์Šค ๋˜๋Š” ์œ„์น˜์— ์žˆ๋Š” ์š”์†Œ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ ์กฐ๊ฑด์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐฐ์—ด์€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ธ๋ฑ์‹ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค.
    db.inventory.find( { "dim_cm.1": { $gt: 25 } } )
  • ex) dim_cm ๋ฐฐ์—ด์˜ ๋‘ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ 25๋ณด๋‹ค ํฐ document๋ฅผ ์ฟผ๋ฆฌํ•œ๋‹ค.
  • ๋ฐฐ์—ด ๊ธธ์ด๋กœ ๋ฐฐ์—ด ์ฟผ๋ฆฌ
    • $size ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์š”์†Œ ์ˆ˜๋กœ ๋ฐฐ์—ด์„ ์ฟผ๋ฆฌํ•œ๋‹ค.
      db.inventory.find( { "tags": { $size: 3 } } )
    • ex) tags ๋ฐฐ์—ด์— 3๊ฐœ์˜ ์š”์†Œ๊ฐ€ ์žˆ๋Š” document๋ฅผ ์„ ํƒํ•œ๋‹ค.
728x90
๋ฐ˜์‘ํ˜•