2014-11-01 2 views
5

각 노트에 제목과 본문이 들어있는 노트 배열을 저장하고 싶습니다. 본문없이 메모 제목 목록을 검색 할 수 있습니까? 예를 들어컬렉션에서 특정 키만 검색하십시오.

:

notes: [ ewi4ef36wi: { title: 'Shopping List', body: 'todo' } o9kng23inw: { title: 'Things To Do', body: '' } ]

가 어떻게 그냥 타이틀 목록을 검색 할 수 있을까?

답변

3

아니요. Firebase의 Web/JavaScript API는 요청한 노드 아래에 항상 전체 트리를 반환합니다.

가장 일반적인 해결 방법은 사람들이 키를 보관하는 트리에서 보조 분기를 설정하는 것입니다.

Notes 
    1: { "body": "hello", "title": "yessir" } 
    2: { "body": "again", "title": "title2" } 
    3: { "body": "there", "title": "another" } 
Notes_index 
    1: true 
    2: true 
    3: true 

이것은 일반적으로 색인이라고합니다. on('child_added'Notes_index에 입력 한 다음 (필요한 경우) once('value'을 사용하여 각 메모의 콘텐츠를 가져옵니다.

색인은 종종 대체 키로 노드에 액세스 할 수있게 만드는 데 사용됩니다. 이러한 위의 제목의 지표로 : 중포 기지가 어떤 분야에 필터링/주문을 할 수 있도록 자신의 쿼리 API를 확장되기 때문에

Title_index 
    "another": 3 
    "title2": 2 
    "yessir": 1 

이 마지막 구조는 곧, 더 이상 필요하지 않을 수도 있습니다. 그러나 유스 케이스의 경우 인덱스가 여전히 유용합니다.

+1

위대한 답변, 프랭크! 한 가지 수정안 : [shallow = true]를 사용하여 모든 데이터를 가져 오지 않고 키 목록을 검색 할 수 있습니다 (https://www.firebase.com/docs/rest/guide/retrieving-data.html#section-rest-uri- params)를 REST API를 통해 가져올 수 있습니다. 여기에는 수백만 개의 노드에 대한 몇 가지 제한 사항이 있지만 대안이 될 수 있습니다. – Kato

+0

차가움. 나는 그것을 몰랐다. 웹/자바 스크립트 API에 비슷한 기능이 있으면 좋을 것입니다. 그럼 다시 : 나는 현재 웹 API의 단순함을 좋아한다. 적절한 기능 만 있습니다. –

0

참고로 제목이나 본문 값을 설정할 때 반드시 set a priority이어야합니다. 그런 다음 bind to the notes endpoint (receive events and data) limited to keys matching a specified priority 수 있습니다.

+0

이렇게하면 더 적은 수의 노드를 검색 할 수 있지만 적은 수의 노드를 검색 할 수 있습니다. 나는 'equalTo' btw가 있다는 것을 몰랐다. 이것은 같은 값으로 시작하고 끝내는 나의 일반적인 트릭보다 더 효율적으로 들린다 :'startAt ('value ') .endAt ('value ')' –

+0

나는 있어야했다. 내 질문에 더 구체적으로 :) 내가 원하는 것은 노드 수를 줄였습니다 (예를 들어 제목 만). 둘 다 귀중한 정보를 제공하므로 두 가지 대답을 그대로 두겠습니다. 피드백을 주셔서 감사합니다 :) – Nippysaurus

+0

질문에있는 데이터 구조의 제목 만 검색 할 수있는 코드를 공유 할 수 있습니까? –

관련 문제