2017-12-15 33 views
0

나는 모든 MDN 주위에 읽어 봤는데,하지만 난 stuff like를 얻을 :IDBObjectStore.createIndex()에서 keyPath의 목적은 무엇입니까?

keyPath
인덱스가 사용하는 키 경로. keyPath 비어있는 인덱스를 만들고 keyPath 시퀀스 (배열)로 전달할 수도 있습니다.

글쎄, s @! t, keyPath은 키 경로입니다. 그러나 그것은 무엇입니까? (그들은 그것을 전화로, 또는 인덱스) 모든 examples에서

, 그것은 컬럼의 이름과 같은 일이 :

objectStore.createIndex("hours", "hours", { unique: false }); 
    objectStore.createIndex("minutes", "minutes", { unique: false }); 
    objectStore.createIndex("day", "day", { unique: false }); 
    objectStore.createIndex("month", "month", { unique: false }); 
    objectStore.createIndex("year", "year", { unique: false }); 

They say 당신이 통과 할 수 :

  • 빈 문자열을 - ""
  • 유효한 자바 스크립트 식별자 (유효한 JS 변수 이름을 의미합니다)
  • 여러 자바 스크립트 마침표로 분리 된 식별자, 예를 들어 : "name.name2.foo.bar"
  • 전술 중 하나를 포함하는 배열 예 : ["foo.bar","","name"]

I이 게재 무엇 목적 상상할 수 없다. 나는 무엇을 keyPath이 무엇인지 이해하지 못하고 무엇을 위해 사용할 수 있습니까? 누군가가 keyPath이 열의 이름이 아닌 다른 예제 사용법을 제공 할 수 있습니까? keyPath의 효과는 데이터베이스에 어떤 영향을 미칩니 까?

답변

0

keypath는 개체의 특정 속성이 특별한 역할을하는 것을 indexedDB에 표시하는 방법입니다. SQL 데이터베이스에서 테이블의 특정 열이 테이블의 기본 키임을 나타내는 것과 마찬가지로 또는 테이블에서 하나 이상의 특정 열에 인덱스를 만들도록 데이터베이스를 지시하는 방법과 비슷합니다.

즉, 어떤 계산에 어떤 속성을 사용해야 하는지를 결정할 때 indexedDB 구현이 따라야하는 경로입니다. 예를 들어, 주어진 키로 값을 검색 할 때.

개체 속성 값이 개체가 될 수도 있기 때문에이 키는 단순한 키가 아닌 경로입니다. 즉, 계층이 있습니다. 예 : {a:{b:1}}. 값 1에 대한 "경로"는 "a.b"입니다. 경로는 값을 얻기 위해 방문 할 속성 순서입니다.

이름의 핵심 부분은 열이 중요한 역할을한다는 것을 의미합니다. 예를 들어 기본 키 속성 또는 특정 인덱싱 된 속성을 식별하는 데 사용됩니다.

keypath에 포함되지 않은 속성은 indexedDB 구현이 전체 객체를 속성 모음으로 취급하고 해당 객체에만주의를 기울이거나 해당 객체의 일부인 인식을 무시한다는 점에서 무시됩니다. keypath.

+0

따라서 어떤 객체를 새 행으로 삽입 할 때 직렬화/직렬화 해제 경로가 필요합니까? –

+0

죄송하지만 serialization 경로가 무슨 뜻인지 이해할 수 없습니다. – Josh

1

예가 도움이 될 수 있습니다. 객체 저장소에서 키 경로를 사용하는 경우 각 put() 호출에서 키를 지정하지 않고 저장된 객체에서 키를 뽑아 낼 수 있습니다.

key | value 
------+------------------- 
123 | {id: 123, name: 'Bob'} 
987 | {id: 987, name: 'Alice'} 

하지만 경우 : 당신이 저장소를 제공

store = db.createObjectStore('my_store', {keyPath: 'id'}); 
store.put({id: 987, name: 'Alice'}); 
store.put({id: 123, name: 'Bob'}); 

예를 들어, 그냥 ID와 이름이 기록과 함께, 당신은 객체 저장소에 대한 기본 키로 레코드의 ID를 사용할 수 있습니다

name_index = store.createIndex('index_by_name', 'name'); 

당신이 인덱스 제공 :

0123을 당신은, 당신이 인덱스를 생성 이름으로 기록을 조회 할

(인덱스는 실제로 기본 키만 값의 복사본을 저장하지 않습니다. 그러나이 방법을 시각화하는 것이 더 쉽습니다. 이 또한 인덱스를 반복하는 경우가 커서 볼 속성을 설명합니다)

을 이제 당신이 이름으로 기록을 찾아 볼 수 있습니다.

req = name_index.get('Alice') 

레코드가 저장소에 추가하는 경우 키 경로는 인덱스에 대한 키를 생성하는 데 사용됩니다.

. 구분 기호가있는 키 경로는 더 복잡한 레코드의 조회에 사용할 수 있습니다. 배열 인 키 경로는 키가 배열 인 복합 키 또는 복수 인덱스 항목 (multiEntry: true이 지정된 경우)을 생성 할 수 있습니다.