$exists
์ด ํ์ด์ง์ ๋ด์ฉ
์ ์
$exists
$exists
์ฐ์ฐ์๋ ํ๋ ๊ฐ์ดnull
์ธ ๋ฌธ์๋ฅผ ํฌํจํ์ฌ ์ง์ ๋ ํ๋๋ฅผ ํฌํจํ๊ฑฐ๋ ํฌํจํ์ง ์๋ ๋ฌธ์๋ฅผ ์ผ์น์ํต๋๋ค.
๋ค์๋ ์ฐธ์กฐํ์ธ์.
ํธํ์ฑ
๋ค์ ํ๊ฒฝ์์ ํธ์คํ
๋๋ ๋ฐฐํฌ์ $exists
์ฌ์ฉํ ์ ์์ต๋๋ค.
MongoDB Atlas: ํด๋ผ์ฐ๋์์์ MongoDB ๋ฐฐํฌ๋ฅผ ์ํ ์์ ๊ด๋ฆฌํ ์๋น์ค
MongoDB Enterprise: MongoDB์ ๊ตฌ๋ ๊ธฐ๋ฐ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
MongoDB Community: MongoDB์ ์์ค ์ฌ์ฉ ๊ฐ๋ฅ ๋ฌด๋ฃ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
๊ตฌ๋ฌธ
$exists
ํํ์์ ์ง์ ํ๋ ค๋ฉด ๋ค์ ํ๋กํ ํ์
์ ์ฌ์ฉํฉ๋๋ค.
{ field: { $exists: <boolean> } }
<boolean>
์ด ์ฐธ์ธ ๊ฒฝ์ฐ $exists
์ ํ๋ ๊ฐ์ด null
์ธ ๋ฌธ์๋ฅผ ํฌํจํด ํ๋๊ฐ ํฌํจ๋ ๋ฌธ์์ ์ผ์นํฉ๋๋ค. <boolean>
์ด ๊ฑฐ์ง์ธ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ๋ ํด๋น ํ๋๋ฅผ ํฌํจํ์ง ์์ ๋ฌธ์๋ง ๋ฐํํฉ๋๋ค. [1]
[1] | ์ฌ์ฉ์๋ ๋ ์ด์ ์ฟผ๋ฆฌ ํํฐ $type: 0 ์ $exists:false ์ ๋์์ด๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. null ๋๋ ๋๋ฝ๋ ํ๋๋ฅผ ์ฟผ๋ฆฌํ๋ ค๋ฉด null ๋๋ ๋๋ฝ๋ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์. |
Atlas Search์ ์ฌ์ฉํ์ฌ Atlas์์ ๋ฐ์ดํฐ ์ฟผ๋ฆฌํ๊ธฐ
MongoDB Atlas์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ $search
์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ Atlas Search ์กด์ฌ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. $search
ํ์ $exists
(์)๋ฅผ ์คํํ๋ ๊ฒ์ ์กด์ฌ ์ฐ์ฐ์์ ํจ๊ป $search
(์)๋ฅผ ์คํํ๋ ๊ฒ๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง๋๋ค.
์ด ์ฐ์ฐ์์ Atlas Search ๋ฒ์ ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด Atlas ์ค๋ช ์์์ ์กด์ฌ ์ฐ์ฐ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์์
์กด์ฌ ๋ฐ ๊ฐ์ง ์์
๋ค์ ์๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
db.inventory.find( { qty: { $exists: true, $nin: [ 5, 15 ] } } )
์ด ์ฟผ๋ฆฌ๋ collection inventory
์์ ํ๋ qty
์ด(๊ฐ) ์กด์ฌํ๋ฉฐ, ๋ํ ํด๋น ๊ฐ์ด 5
๋๋ 15
์ ๊ฐ์ง ์์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ํํฉ๋๋ค.
Null Values
๋ค์ ์์์๋ ๋ค์ ๋ฌธ์์ ํจ๊ป spices
๋ผ๋ ์ปฌ๋ ์
์ ์ฌ์ฉํฉ๋๋ค.
db.spices.insertMany( [ { saffron: 5, cinnamon: 5, mustard: null }, { saffron: 3, cinnamon: null, mustard: 8 }, { saffron: null, cinnamon: 3, mustard: 9 }, { saffron: 1, cinnamon: 2, mustard: 3 }, { saffron: 2, mustard: 5 }, { saffron: 3, cinnamon: 2 }, { saffron: 4 }, { cinnamon: 2, mustard: 4 }, { cinnamon: 2 }, { mustard: 6 } ] )
$exists: true
๋ค์ ์ฟผ๋ฆฌ๋ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ saffron: { $exists: true }
์(๋ฅผ) ์ง์ ํฉ๋๋ค:
db.spices.find( { saffron: { $exists: true } } )
๊ฒฐ๊ณผ๋ saffron
ํ๋์ null ๊ฐ์ด ํฌํจ๋ ๋ฌธ์๋ฅผ ํฌํจํ์ฌ saffron
ํ๋๊ฐ ํฌํจ๋ ๋ฌธ์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
{ saffron: 5, cinnamon: 5, mustard: null } { saffron: 3, cinnamon: null, mustard: 8 } { saffron: null, cinnamon: 3, mustard: 9 } { saffron: 1, cinnamon: 2, mustard: 3 } { saffron: 2, mustard: 5 } { saffron: 3, cinnamon: 2 } { saffron: 4 }
$exists: false
๋ค์ ์ฟผ๋ฆฌ๋ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ cinnamon: { $exists: false }
์(๋ฅผ) ์ง์ ํฉ๋๋ค:
db.spices.find( { cinnamon: { $exists: false } } )
๊ฒฐ๊ณผ๋ cinnamon
ํ๋๋ฅผ ํฌํจํ์ง ์๋ ๋ฌธ์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
{ saffron: 2, mustard: 5 } { saffron: 4 } { mustard: 6 }
์ฌ์ฉ์๋ ๋ ์ด์ ์ฟผ๋ฆฌ ํํฐ $type: 0
์ $exists:false
์ ๋์์ด๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. null ๋๋ ๋๋ฝ๋ ํ๋๋ฅผ ์ฟผ๋ฆฌํ๋ ค๋ฉด null ๋๋ ๋๋ฝ๋ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
ํฌ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ $exists
์ฑ๋ฅ ๊ฐ์
๋ค์ ํ์์๋ ํฌ์ ์ธ๋ฑ์ค์ ๋นํฌ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ $exists
์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๋น๊ตํฉ๋๋ค.
$exists ์ฟผ๋ฆฌ | ํฌ์ ์ธ๋ฑ์ค ์ฌ์ฉ | Using a Non-Sparse Index |
---|---|---|
| ๊ฐ์ฅ ํจ์จ์ ์
๋๋ค. MongoDB๋ ์ ํํ ์ผ์น์ํฌ ์ ์์ผ๋ฉฐ | ์ธ๋ฑ์ค๊ฐ ์๋ ์ฟผ๋ฆฌ๋ณด๋ค ๋ ํจ์จ์ ์ด์ง๋ง ์ฌ์ ํ |
| ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ |
|
ํฌ์ ์ธ๋ฑ์ค๊ฐ ์๋ ํ๋์ { $exists: true }
์(๋ฅผ) ์ฌ์ฉํ๊ฑฐ๋ ์ธ๋ฑ์ฑ๋์ง ์์ ํ๋์ { $exists: true }
์(๋ฅผ) ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ๋ collection์ ๋ชจ๋ ๋ฌธ์๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ์ฑ๋ฅ์ ํฅ์์ํค๋ ค๋ฉด ๋ค์ ์๋๋ฆฌ์ค์ ๊ฐ์ด field
์ ํฌ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์ญ์์ค.
stockSales
collection์ ๋ง๋ญ๋๋ค.db.stockSales.insertMany( [ { _id: 0, symbol: "MDB", auditDate: new Date( "2021-05-18T16:12:23Z" ) }, { _id: 1, symbol: "MDB", auditDate: new Date( "2021-04-21T11:34:45Z" ) }, { _id: 2, symbol: "MSFT", auditDate: new Date( "2021-02-24T15:11:32Z" ) }, { _id: 3, symbol: "MSFT", auditDate: null }, { _id: 4, symbol: "MSFT", auditDate: new Date( "2021-07-13T18:32:54Z" ) }, { _id: 5, symbol: "AAPL" } ] ) ๋ค์์
_id
์ด ํฌํจ๋ ๋ฌธ์:3
nullauditDate
๊ฐ์ด ์กด์ฌํฉ๋๋ค.5
auditDate
๊ฐ์ด ๋๋ฝ๋์์ต๋๋ค.
auditDate
ํ๋์ ํฌ์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ญ๋๋ค.db.getCollection( "stockSales" ).createIndex( { auditDate: 1 }, { name: "auditDateSparseIndex", sparse: true } ) ๋ค์ ์์์์๋
auditDate
ํ๋์ ๊ฐ(null ํฌํจ)์ด ์๋ ๋ฌธ์์ ์๋ฅผ ๊ณ์ฐํ๊ณ ํฌ์ ์ธ๋ฑ์ค๋ฅผ์ฌ์ฉํฉ๋๋ค.db.stockSales.countDocuments( { auditDate: { $exists: true } } ) ํด๋น ์์์์๋ 5๋ฅผ ๋ฐํํฉ๋๋ค.
auditDate
๊ฐ์ด ๋๋ฝ๋ ๋ฌธ์๋ ๊ณ์ฐ๋์ง ์์ต๋๋ค.
ํ
field
์ null์ด ์๋ ๊ฐ์ด ์๋ ๋ฌธ์๋ง ํ์ํ ๊ฒฝ์ฐ ๋ค์์ ์ค์ํฉ๋๋ค.
$exists: true
๋์$ne: null
์(๋ฅผ) ์ฌ์ฉํ ์ ์์ต๋๋ค.field
์๋ ํฌ์ ์ธ๋ฑ์ค์ด(๊ฐ) ํ์ํ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, stockSales
collection์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
db.stockSales.countDocuments( { auditDate: { $ne: null } } )
์ด ์์์์๋ 4๋ฅผ ๋ฐํํฉ๋๋ค. auditDate
๊ฐ์ด ๋๋ฝ๋์๊ฑฐ๋ null auditDate
๊ฐ์ด ์๋ ๋ฌธ์๋ ๊ณ์ฐ๋์ง ์์ต๋๋ค.
๋ค์๋ ์ฐธ์กฐํ์ธ์.