[MongoDB] ์ฐ์ฐ์, $in, $nin - (4)
๐๏ธ Operators & Complex Queries
์ด๋ฒ์๋ mongdoDB์ ์ฐ์ฐ์, ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ๋ค๋ค ๋ณด๋๋ก ํ๊ฒ ๋ค. ์ด์ ํฌ์คํ ์์๋ ๋ฐ์ดํฐ๋ฅผ ํํฐ๋ง ํ๋๋ฒ์ ์ ๊น ๋ฐฐ์ ๋๋ฐ, ์ด๋ฒ์๋ ํํฐ๋ง์ ์ฐ์ฐ์๋ฅผ ์ถ๊ฐํด ์กฐ๊ธ ๋ ๋์ ๊ธฐ๋ฅ์ ์จ๋ณด์. ์ด์ ํํฐ๋ง์์๋ db.books.find({rating : 7})์ ํ์ฌ books ์ปฌ๋ ์ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ์ค rating : 7์ ๊ฐ์ง document๋ฅผ ๊ฐ์ ธ์ค๋ ๋ก์ง์ ์ํํ์๋๋ฐ, ์ด๋ฒ์๋ rating์ด 7 ์ด์์ธ document๋ง ๊ฐ์ ธ์ ๋ณด์ฌ์ฃผ๋ ๋ก์ง์ ์ํํด๋ณด์.
์ฌ์ค ์ฐ์ฐ์๋ก ์ ์ผ ์ง๊ด์ ์ธ ๋ถ๋ฑํธ๋ฅผ ์ธ ์ค ์์์ง๋ง, ๋ฌ๋ฌ์ฌ์ธ๊ณผ ํน์ ์ปค๋งจ๋๋ฅผ ์ด์ฉํ๋ ์ข ๋นํฉ์ค๋ฌ์ ๋ค. ์ฌ๊ธฐ์
.find({ rating : {$gt : 7}})์, rating์ด 7๋ณด๋ค ํฐ ๊ฐ๋ค์ ์ฐพ์ ๋ฐํํ๋ค.(์ฌ๊ธฐ์ rating์ด 7์ธ ๊ฐ๋ค์ ํฌํจ๋์ง ์๋๋ค.) ์ฆ, $gt๋ >= ๊ฐ ์๋ >์ ๊ฐ๋ค.
- $gt : greater than
- $lt : less than
๋ง์ฝ ์ฌ๊ธฐ์ < , >๊ฐ ์๋๋ผ ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด์ ํ๊ณ ์ถ๋ค๋ฉด,
- gte : greater than or equal
- lte : less than or equal
์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด์ ์ฐ๋ฆฌ๊ฐ ๋ ๋ง์ด ์ฌ์ฉํ๋ or ์ฐ์ฐ์์ ๋ํด ์์๋ณด์. ํ๋ก๊ทธ๋๋ฐ์์ or์ ์ฌ๋ฌ๊ฐ์ง์ ์กฐ๊ฑด์ด ์ฃผ์ด์ก์๋, ๋จ ํ๋๋ผ๋ ๋ง์กฑํ๋ฉด '์ฐธ'์ ๋ฐํํ๋ค. ์๋ ์์๋ books ์ปฌ๋ ์ ์์ rating์ด 7์ด๊ฑฐ๋ 9์ธ ์ฑ ๋ค์ ๋ฐํํ๋ ์ปค๋งจ๋์ด๋ค.
db.books.find({$or : [{rating : 7}, {rating : 9}]})
๋จผ์ , find๋ฅผ ํตํด ๋ชจ๋ document๋ฅผ ์ฐธ์กฐํ๊ณ , $or์ ์ฌ์ฉํ๋ค. ์ฌ๊ธฐ์ or์ : ๋ค์ ์ค๋๊ฒ๋ค๋ก ๊ตฌ๋ถ์ง์ด์ง๋๋ฐ, []๋ก ๋ฐฐ์ด์์ {}๋ฅผ ํฌํจ์์ผ ์กฐ๊ฑด๋ค์ ๋ฃ์ด์ค๋ค.
๐๏ธ $in, $nin
๐ข $in
$in ์ฐ์ฐ์๋ ์ฃผ์ด์ง ๋ฐฐ์ด์ ํน์ ๊ฐ๋ค๊ณผ ์ผ์นํ๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์์๋ฅผ ๋ณด์.
์ ์ปค๋งจ๋๋ฅผ ์ดํด๋ณด์. ๋จผ์ , .find()๋ก books ์ปฌ๋ ์ ์ ๋ชจ๋ document๋ฅผ ์ฐธ์กฐํ๊ณ , find์ ํ๋ผ๋ฏธํฐ๋ก { rating : }์ ์ฃผ์ด find()๊ฐ ๋ฐํํ ๋ชจ๋ document์ rating์ ์ฐธ์กฐํ๋ค. ์ฌ๊ธฐ์ rating : {$in : [7,8,9]}๋ rating์ด 7์ด๊ฑฐ๋ 8์ด๊ฑฐ๋ 9์ธ document๋ฅผ ์ฐพ์ ๋ฐํํ๋ค.
์ด๋ ๊ฒ ๋ณด๋ฉด ์์์ ๋ฐฐ์ด or์ด๋ ๋ญ๊ฐ ๋ค๋ฅธ๊ฑด๊ฐ ์ถ์ ์๊ฐ์ด ๋ค๊ฒ์ด๋ค. $in : [7,8,9]๋ $or : [{rating : 7}, {rating : 8}, {rating : 9}]์ ๊ฐ๋ค. ํ์ง๋ง ๋จ์ํ ์ฝ๋์ ๊ธธ์ด๋ก ๋ณด๋๋ผ๋ $in์ ์ฐ๋๊ฒ์ด ํจ์ฌ ์งง๊ณ ์ง๊ด์ ์ด๋ค.
๐ข $nin
๋์น๊ฐ ๋น ๋ฅด๋ค๋ฉด $nin์ not-in์ ์ค์๋ง ์ด๋ผ๋๊ฒ์ ์ ์ ์๋ค. ์ฆ, $in์ ํน์ ๋ฒ์ ์์ ์๋ ๊ฐ๋ค์ ๋ฐํํ๋ค๋ฉด, $nin์ ์ด ๋ฒ์์์ ํด๋น๋์ง ์๋ ๊ฐ๋ค์ ๋ฐํํ๋ ค ํ ๊ฒ์ด๋ค.
์๋ฅผ ๋ณด๋ฉด, rating์ด 7,8,9๊ฐ ์๋ ๋ชจ๋ document๋ฅผ ๋ฐํํ๋ ์ปค๋งจ๋์ด๋ค.