js 처리 계층 데이터 구조의 총화
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 방법 으로 처리 해 야 효력 이 발생 합 니 다.
좋아요.그렇게 많은 말 을 했 는데, 어쩌면 내 가 무슨 말 을 하 는 지 알 것 같 아...손 웃음...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.