Intro
์๋ ํ์ธ์. ์ด๋ฒ์๊ฐ์๋ MongoDB ๋ชฝ๊ณ ๋๋น์์ ๊ฒ์๊ธ ์ฝ์(read)/์์ฝ์(unread) ํ์์ํ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
How to do
์ฐ์ ์ ์ํฉ์ ๊ฒฝ์ฐ ๊ณต์ง์ฌํญ Collection(๊ฒ์๊ธ Collection๋ผ๊ณ ๋ด๋ ๋ฌด๋ฐฉ), ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ Collection์ด ์กด์ฌํฉ๋๋ค.
User
user collection์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. _id, userId, userName ํ๋๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค.
{
_id: user_uniqueId,
userId: senderId,
userName: userName
}
Notice
notice collection์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. _id, noticeId, title, contents ํ๋๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค.
{
_id: user_uniqueId,
noticeId: noticeId,
title: 'this is title',
contents: 'this is the notice',
}
์ ์ํฉ์์ ์ฝ์/์์ฝ์ ํ์ ์ํ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํฌ๊ฒ 2๊ฐ์ง ๋ฐฉ๋ฒ์ ์๊ฐํด๋ดค๋๋ฐ์,
1. ์๋ก์ด ์ฝ์/์์ฝ์ ํ์ ์ํ๋ฅผ ์ํด ์๋ก์ด ์ปฌ๋ ์ ์ ๋ง๋ค์ด์ ๊ด๋ฆฌ
{
_id: notice_uniqueId,
type: 'notice',
userId: userId,
noticeId: noticeId,
read: true / false,
},
{
_id: message_uniqueId,
type: 'message',
userId: userId,
messageId: messageId,
read: true / false,
}
2. notice collection์ read_by ์ ๊ฐ์ ์ฝ์/์์ฝ์ ํ์ ์ํ ํ๋ณ์ ์ํ ํ๋๋ฅผ ์ถ๊ฐ
{
_id: 'document#42',
...
read_by: ['admin', 'user1']
}
2๊ฐ์ง ๋ฐฉ๋ฒ ์ค ๊ณ ๋ฏผ์ ํ๋ค๊ฐ read_by ํ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ณด๋ค๋ ์๋ก์ด ์ปฌ๋ ์ ์ ๋ง๋๋ ๊ฒ ๋์ ๊ฒ ๊ฐ์ ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ ํํ๊ธฐ๋ก ํ์ต๋๋ค. read_byํ๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋น์ค๋ฅผ ์ด์ฉํ๋ ์ฌ์ฉ์๊ฐ ๋์ด๋ ์๋ก ๊ฐ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋ ๊ฒ ๊ฐ์๊ณ , ๋ถ๋ฆฌ๋ ์ํ๋ก ์ปฌ๋ ์ ์ ๊ด๋ฆฌํ๋ ๊ฒ ํต์์ ์ผ๋ก ๋ ๋์ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
Create New Collection
์ฝ์/์์ฝ์ ํ์ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํ ์๋ก์ด ์ปฌ๋ ์ ์ ์์ฑํ์ต๋๋ค. ์ฌ์ฉ์๊ฐ ํด๋น notice Id ๋ฅผ ํด๋ฆญ ์, ๋ง๋ค์ด์ง ์๋ก์ด ์ปฌ๋ ์ ์ document ๋ฅผ ์ถ๊ฐํด์ฃผ๋๋ก ํ์ต๋๋ค.
์ปฌ๋ ์ ์ ํด๋นํ๋ noticeId์ userId๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ์ด๋ฏธ ์ฝ์ ๊ณต์ง์ฌํญ์ด ๋๊ฒ ์ฃ . ์๋์ ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ์ฝ์/์์ฝ์ ํ์ ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
db.read.find({type: 'notice', userId: userId, noticeId: noticeId })