[MongoDB] Index: Partial Index
๋๋ก๋, ์ธ๋ฑ์ค๋ฅผ ๋ถ๋ถ์ ์ผ๋ก๋ง ๋ง๋ค๊ณ ์ถ์ ์ ์๋ค.
์ธ๋ฑ์ค๋ ์์ด๊ณ ์์ด๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ๋ฅผ ์ ์ ํ๋ ์์ด ํฌ๊ฒ ๋ ์ ์๋๋ฐ, Partial Index๋ ๊ทธ๊ฑธ ์ข ํ์ ํด์ ์ค์ด๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
๋ฌธ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค. partialFilterExpression์ ์กฐ๊ฑด์์ ์ง์ ํ๋ฉด ๋๋ค.
db.์ปฌ๋ ์
.createIndex(
{ ์ธ๋ฑ์ค ๋์ ํ๋... },
{
partialFilterExpression: { ์กฐ๊ฑด์... },
}
);
๊ทธ๋ฌ๋ฉด partialFilterExpression ์กฐ๊ฑด์์ ๋ถํฉํ๋ ๋ฐ์ดํฐ๋ง ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๊ณ , ๋ถํฉํ์ง ์์ผ๋ฉด ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ง ์๋๋ค. ๋ ์กฐํํ ๋๋ ๋น์ฐํ partialFilterExpression์ ๋ถํฉํด์ผ๋ง ์ธ๋ฑ์ค๋ฅผ ํ๊ณ , ๋ถํฉํ์ง ์์ผ๋ฉด ์ธ๋ฑ์ค ์ค์บ์ ํ์ง ๋ชปํ๋ค.
์ด ๊ธฐ๋ฅ์ ๋จ์ํ ์ธ๋ฑ์ค ์ฌ์ด์ฆ๋ฅผ ์ค์ด๋ ๊ฒ์๋ง ๊ฐ์ ์ด ์๋ ๊ฒ์ ์๋๋ค.
unique์ ๊ฒฐํฉํ๋ฉด ๊ฐ๋ ฅํ๋ฉด์๋ ์ ์ฐํ DB ์์ค ์ ์ฝ์ ๊ฐํ ์ ์๋ค.
์๋ฅผ ๋ค๋ฉด, user ๋ฐ์ดํฐ์ email ๊ธฐ์ค์ผ๋ก ์ ์ผ์ฑ์ ๋ณด์ฅํ๋, ์ญ์ ๋ ํ์์ ์ ์ธํ๋ ์๊ตฌ์ฌํญ์ ์ธ๋ฑ์ค ํ๋๋ง์ผ๋ก ๋ง์กฑ์ํฌ ์ ์๋ค.
db.users.createIndex(
{ email: 1 },
{
unique: true,
partialFilterExpression: { deletedAt: { $eq: null } },
}
);
์ด๋ฌ๋ฉด ์ญ์ ๋์ด์ deletedAt!=null ๋ฐ์ดํฐ๋ ์ ์ผ์ฑ ์ ๊ฒฝ์ฐ์ง ์๊ณ ์ผ๋จ ์์ด๊ณ , ์ญ์ ๋์ง ์์์ deletedAt=null์ธ ๊ฒ์ ๋ํด์๋ง ์ด๋ฉ์ผ ์ค๋ณต์ ๊ฑฐ๋ถํ ๊ฒ์ด๋ค.
์ฐธ์กฐ
https://www.mongodb.com/ko-kr/docs/manual/core/index-partial/