티스토리 뷰

📌2020 07 11


  • MySql -> NoSql 데이터 베이스 변경 , 개인프로젝트이기 때문에 몽고DB가 더 적절하다고 판단함

  • 수업에서는 한명의 User당 Order 데이터를 여러개 생성했는데, 이럴경우 Order에 들어간 아이템들이 무의미하게 겹쳐질 수 있겠다 생각함, 따라서 한명의 User당 하나의 Order데이터만 갖고 Order에 들어갈 아이템 리스트를 Object Array로 변경하여 Order 데이터에 Embeded함.

    추후에 유저 한명 당 여러개의 Order를 생성해야하는 경우에는 이전 방식으로 다시 돌아가도록!

  • 기존의 Order에는 아이템의 정보를 Embeded 했지만, products와 order의 관계가 다대다(Many to Many) 관계라고 판단하여 Products를 참조(ref)하도록 함. 해당 Order데이터에는 product의 id만 저장하고, getOrder 라우팅에서 populate를 이용해 해당 아이템의 정보를 추출하는 방향으로 바꿈.

  • 몽고 DB 스키마 설계를 더 공부하자!

변경 전 Order Model

product에 해당 아이템의 모든 정보가 담기고 하나의 유저가 여러개의 Order 스키마를 가질 수 있다.

const orderSchema = new Schema({
    products:[{
        product : {type: Object, required:true},
        quantity: {type: Number, required:true} 
    }]
    ,user:{
       userid:{
        type:Schema.Types.ObjectId,
        ref:'User',
        required:true
       },
       name:{
        type:String,
        required:true
       }
    }
})

변경 후 Order Model

products.item.productId에 해당 아이템의 ref값이 담기고 유저 당 한개의 Order 스키마만 가질 수 있다.

const OrderSchema = new Schema({
   products: {
       items:[
           {
               productId:{
                type:Schema.Types.ObjectId,
                ref:'Product',
                required:true
               },
               quantity:{
                type:Number,
                required:true
               }
           }
       ]
   }
    ,user:{
        userId:{
            type:Schema.Types.ObjectId,
            ref:'User',
            required:true
        },
        name:{
            type:String,
            required:true}
    }
});

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함