배달 어플 주문 리뷰 서비스
db.shops.insertOne({
_id: 1,
name: "Tommy Steak House",
desc: "Greatest Steak House Ever.",
phone: "000-0000-1234",
reviews: [
{
review_id: 1,
user: "James",
review: "So Good!!",
date: new Date(),
rating: 10
},
{
review_id: 2,
user: "Tommy",
review: "Not Bad.",
date: new Date(),
rating: 7
},
{
review_id: 3,
user: "Kevin",
review: "Yummy!!",
date: new Date(),
rating: 5
},
]
})문제점
개선하기
Working Set을 줄인다 -> 도큐먼트의 사이즈를 줄인다 -> 사용자의 패턴을 분석한다.
예시) 음식점을 클릭하고 리뷰를 확인할 때 모든 리뷰를 보는 것이 아닌 최신 5~10개 정보만 저장한다.
설계) 리뷰 데이터의 일부(최신)만 shop 컬렉션에 저장하고, 나머지는 리뷰 컬렉션에 저장한다.
review = {
review_id: 800,
user: generateRandomString(5),
review: generateRandomString(10),
date: new Date(),
rating: Math.floor(Math.random() * 10)
}
db.reviews.insertOne(review) // 리뷰 컬렉션을 생성하여 리뷰 데이터를 저장
db.shops.updateOne(
{
_id: 2
},
{
$push: {
reviews: {
$each: [review],
$slice: -10 // 새로운 리뷰가 작성되었을 때, 모든 리뷰가아닌 최신 10개의 리뷰만 보여준다
}
}
}
)
db.reviews.find()
db.shops.find()

(가게를 검색했을 떄, 모든 리뷰가 아닌 최신 몇개의 리뷰만 보여지게 된다.)