js 처리 계층 데이터 구조의 총화

4865 단어
개발 자가 복잡 한 데이터 구조 에 대한 처리 능력 도 개발 자의 수준 을 나타 내 는 도량 이 죠...최근 에 자신 이 포 함 된 데이터 구조, 등급 데이터 구조 에 대한 처리 능력 이 그다지 크 지 않다 는 것 을 발견 했다.이런 것들 에 자주 자신 을 어 지 럽 히 고...개발 효율 에 심각 한 영향...조금 만 낮 게 정리 해 봤 는데...
1. mongodb 디자인 등급 관계 데이터 (여기 서 주로 mongoose 라 고 합 니 다)
① 이런 장면 이 있다 고 가정 한다.어떤 글 아래 댓 글 이 있 습 니 다. 댓 글 마다 답장 을 받 을 수 있 고 답장 마다 답장 을 받 을 수 있 습 니 다.
우선, 우 리 는 일반적인 한 쌍 이 많은 관 계 는 인용, populate 작업 을 통 해 해당 하 는 인용 대상 을 찾 을 수 있다 는 것 을 알 고 있다. 예 를 들 어:
var essaySchema = new mongoose.Schema({   //  schema
    user:{
        type: mongoose.Schema.Types.ObjectId, //      
        ref: 'user', //   User Model
        require: true //  
    },
  ...
});

문장 과 평론 의 관 계 는 한 쌍 이 많다.당연히 이런 식 으로 처리 하면 된다.
하지만 댓 글 과 답장 의 관 계 는 재 미 있 었 다.우선, 댓 글 과 답장, 답장 과 이 답장 은 다른 것 이지 만 (보기 만 해도 어색 하 다) 이러한 shema 의 메 시 지 는 모두 같은 필드 로 구성 되 어 있다.자신 이 여러 개 를 끼 워 넣 었 다 고 할 수 있다.
이 럴 때 는 이렇게 처리 해 야 한다.
//  Schema  
var commentSchema = new mongoose.Schema({
    content: {
        type: String, 
        require: true 
    },
    created: {
        type: Date, 
        "default": Date.now 
    },
    user: {
        type: mongoose.Schema.Types.ObjectId, //     
        ref: 'user', //   User Model
        require: true //  
    },
    subComment: [this], //           ,       
});

가장 중요 한 것 은 마지막 문장 이 고, 실질 적 으로 는 자신 을 재 귀적 으로 인용 하 는 것 이다.찾 을 때 도 이전 subComment 에 따라 자신 을 찾 아야 합 니 다.심층 을 채 웠 을 때 는 찾기 가 쉽 고 찾기 속도 도 떨어진다.등급 제한 을 건의 하 다.
실천 프로젝트: 간단 한 node + express + mongodb 사진 공유
 
2. 실제 개발 장면 에서 의 등급 관계 데이터
① 만약 에 이런 장면 이 있다 고 가정 하면 하나의 상품 배열 이 있 고 모든 상품 은 두 가지 차원, 색채 와 규격 이 있다.색상 과 규격 의 조합 으로 인해 발생 하 는 sku (각 조합 상황 으로 이해 할 수 있 는 표지) 수량 은 색상 수량 * 규격 수량 입 니 다.우리 가 렌 더 링 을 마 친 후에 고객 은 규격 을 바 꿀 때마다 해당 하 는 sku 를 찾 아야 합 니 다.
만약 에 고객 이 하나의 규격 을 바 꿀 때마다 우 리 는 몇 번 째 상품, 바 꾼 규격 에 따라 바 뀐 규격 을 찾 지 못 한다 고 생각해 보 세 요.그럼 매번 삼중 순환...
이런 상황 에서 가장 좋 은 방법 은 데 이 터 를 얻 을 때 3 차원 데 이 터 를 초기 화 하 는 것 이다. 즉, Array [상품 index] [색상] [규격] 이다.이렇게 매번 전환 할 때마다 해당 항목 을 읽 으 면 sku 를 찾 을 수 있 습 니 다.
그러나 만약 상품 의 차원 이 2 차원 이 아니 라 다 차원 이 라면 모든 조합 에 이런 상품 이 존재 하 는 것 은 아 닐 까?
데 이 터 를 구성 하 는 방법 은 현명 하지 못 하 다. 하 나 는 조합 수가 너무 많 고 모든 조합 상품 이 존재 하 는 것 이 아니 라 순환 이 너무 많다 는 것 이다.
이 럴 때 는 대상 을 이용 해 데 이 터 를 만들어 야 한다.
첫 번 째 단 계 는 전시 수요 에 따라 구성 된다.전시 할 때 특정한 상품 의 특정한 차원 이 특정한 값 이라는 것 만 알 면 된다.즉:
var obj = {[
{'  ':'1',sku:'','  1’:'...','  2':'...',...}
]}

차원 전환 을 클릭 할 때 먼저 원래 의 차원 정보 에 따라 사용자 가 새로 선택 한 차원 을 업데이트 합 니 다.이 새로운 차원 대상 을 옮 겨 다 니 며 차원 정보 데이터 와 비교 하고 일치 하면 새로운 sku 를 찾 습 니 다.그리고 업데이트 하면 됩 니 다.  
여기 서 자신의 '칩' 과 '목표' 를 명 확 히 하고 어떤 것 에 따라 어떤 경 로 를 통 해 목 표를 달성 할 수 있 는 지 를 명 확 히 해 야 한다.모든 단 계 를 작은 방법 으로 나 누 어 하 다.
 
② 이러한 장면 이 있다 고 가정 하면 먼저 일부 규칙 에 따라 요청 을 합 쳐 서로 다른 데 이 터 를 요청 해 야 한다 (즉, 돌아 온 데이터, 여러 매개 변수 가 결합 되 어 있 으 므 로 데이터 의 원래 대응 관 계 를 분석 해 야 한다). 그리고 일부 데 이 터 를 얻어 야 한다.획득 한 일부 데이터 중 한 데이터 의 매개 변수 로 두 번 째 인 터 페 이 스 를 요청 합 니 다.그리고 다른 데 이 터 를 얻 습 니 다.
먼저 생각 나 는 것 은 promise 로 처리 하고 두 인터페이스 가 모두 요청 되면 처리 하 는 것 일 수 있 습 니 다.그러나 첫 번 째 인터페이스 가 대부분의 주요 데 이 터 를 얻 었 다 면 두 번 째 는 작은 부분의 데이터 다.이때 두 번 째 인 터 페 이 스 를 기다 리 는 것 은 약간 '수지 가 맞지 않 는 다' 는 것 같다. 특히 사용자 체험 에서 한 사용자 가 특정한 페이지 를 열 었 을 때 흰색 화면 은 좋 지 않다.  
이 럴 때 우 리 는 대상 을 잘 이용 하여 우리 에 게 맞 는 데이터 대상 을 구축 해 야 한다.
우 리 는 이렇게 대상 을 초기 화 할 수 있다.
var obj = { 
  '     1'+‘_’+'     1 id' : {
               : [],
               : [], 
    },
 '     2'+‘_’+'     2 id' : {
               : [],
               : [], 
    },
   ...
}

한 마디 로 유일한 것 을 찾 아 대상 을 만 드 는 것 이다.그리고 이 유일한 값 에 따라 해당 하 는 데 이 터 를 채 워 라.그래, 어지럽다 니까.예 를 들 어:
for(var i = 0;i < data.length; i++){
   for(var j = 0;j < data[i].params.length; j++){
        obj[data[i].groupId + '_' + data[i].params[j].pcId] = {};
   }
}

//       
for(var i = 0;i < data.length; i++){
   for(var j = 0;j < data[i].params.length; j++){
     obj[data[i].groupId + '_' + data[i].params[j].pcId][firstItem] = data[i].params[j].list; 
   }
}

//        
for(var i = 0;i < data.length; i++){
   for(var j = 0;j < data[i].params.length; j++){
     obj[data[i].groupId + '_' + data[i].params[j].pcId][moreItem] = data[i].params[j].list; 
   }
}

vue 를 사용 하면 두 번 째 요청 한 데이터 매개 변 수 는 첫 번 째 에서 왔 기 때문에 두 번 째 데이터 가 돌아 온 후에 전역 api, set 방법 으로 처리 해 야 효력 이 발생 합 니 다.
  
좋아요.그렇게 많은 말 을 했 는데, 어쩌면 내 가 무슨 말 을 하 는 지 알 것 같 아...손 웃음... 

좋은 웹페이지 즐겨찾기