회원이 많은 OLTP성 카페의 요구사항을 구현하고 모델링을 진행 해보자.
2.멤버 컬렉션에 멤베가 가입한 카페를 Embedding
멤버 컬렉션에 joined_cafes 배열 필드를 만들어 유저가 가입한 카페를 배열에 추가한다.
/**
* members라는 컬렉션을 만들어 멤버에 대한 정보를 기준으로 넣는다.
* 유저 도큐먼트에 가입한 카페 목록을 배열로 저장한다.
*/
db.members.insertMany([
{
id: "tom93",
first_name: "Tom",
last_name: "Park",
phone: "000-0000-1234",
job: "DBA",
joined_cafes: [
{
_id: 1,
name: "IT Community",
desc: "A Cafe where developer's share information.",
created_at: ISODate("2018-08-09"),
last_article: ISODate("2022-06-01T10:56:32.000Z"),
level: 5,
joined_at: ISODate("2018-09-12"),
},
{
_id: 2,
name: "Game Community",
desc: "Share information about games.",
created_at: ISODate("2020-01-23"),
last_article: ISODate("2022-06-02T10:56:32.000Z"),
level: 4,
joined_at: ISODate("2020-09-12"),
},
],
},
{
id: "asddwd12",
first_name: "Jenny",
last_name: "Kim",
phone: "000-0000-1111",
job: "Frontend Dev",
joined_cafes: [
{
_id: 1,
name: "IT Community",
desc: "A Cafe where developer's share information.",
created_at: ISODate("2018-08-09"),
last_article: ISODate("2022-06-01T10:56:32.000Z"),
level: 5,
joined_at: ISODate("2018-10-02"),
},
{
_id: 2,
name: "Game Community",
desc: "Share information about games.",
created_at: ISODate("2020-01-23"),
last_article: ISODate("2022-06-02T10:56:32.000Z"),
level: 4,
joined_at: ISODate("2021-10-01"),
},
],
},
{
id: "candy12",
first_name: "Zen",
last_name: "Ko",
phone: "000-0000-1233",
job: "DA",
joined_cafes: [
{
_id: 1,
name: "IT Community",
desc: "A Cafe where developer's share information.",
created_at: ISODate("2018-08-09"),
last_article: ISODate("2022-06-01T10:56:32.000Z"),
level: 5,
joined_at: ISODate("2019-01-01"),
},
],
},
{
id: "java1",
first_name: "Kevin",
last_name: "Shin",
phone: "000-0000-1133",
job: "Game Dev",
joined_cafes: [
{
_id: 2,
name: "Game Community",
desc: "Share information about games.",
created_at: ISODate("2020-01-23"),
last_article: ISODate("2022-06-02T10:56:32.000Z"),
level: 4,
joined_at: ISODate("2022-08-10"),
},
],
},
]);
id가 2번인 카페에 가입한 유저를 30만명 추가한 후 id = 1, id = 2인 카페 last_article 필드를 각각 업데이트 한다.
db.members.updateMany(
{
"joined_cafes._id": 1,
},
{
$set: {
"joined_cafes.$.last_article": date,
},
}
);
db.members.updateMany(
{
"joined_cafes._id": 2,
},
{
$set: {
"joined_cafes.$.last_article": date,
},
}
);
분석 및 결과