2016-06-09 3 views
1

데이터를 쿼리하여 알파벳 순으로 정렬 된 항목 목록을 검색하고 "표시"로 표시된 항목으로 필터링하려고합니다.을 (를) 사용하는 Firebase 쿼리. equalTo (부울 값, 문자열 키)가 작동하지 않습니다.

내 데이터 구조는 다음과 같습니다.

listItems 
    list_1_uid 
     item_1_uid 
      name: "Item 01" 
      nameLowercase: "item 01" 
      visible: true 
     item_2_uid 
      name: "zItem 02" 
      nameLowercase: "zitem 02" 
      visible: false 
     item_3_uid 
      name: "aItem 03" 
      nameLowercase: "aitem 03" 
      visible: true 

여기가 내 검색어입니다.

mQuery = mFirebaseDbReference 
    .child("listItems") 
    .child("list_1_uid") 
    .orderByChild("nameLowercase") 
    .equalTo(true, "visible"); 

내 쿼리는 데이터를 반환하지 않습니다. .equalTo (true, "visible") 문을 제거하면 쿼리가 전체 알파벳순 목록을 반환합니다.

필터링 된 목록을 검색하는 방법에 대한 제안 사항이 있으십니까?

답변

2

Firebase의 쿼리는 orderBy 호출에 지정된 속성과 연결됩니다. 따라서이 예제에서 equalTo(boolean value, String key) 호출은 nameLowercase을 참조하므로 nameLowercasetrue으로 설정된 모든 항목을 쿼리합니다. 두 번째 매개 변수는 항목의 키 (예 : item_1_uid)를 나타내며 쿼리에서 시작 지점을 지정하는 데 사용할 수 있습니다. 이것은 예를 들어 결과에 페이지 매김을 할 때 유용합니다.

이 쿼리에 제한이 없기 때문에, 해결책은 쿼리를 사용하는 것이에 의해 주문 "볼 수"다음 최종 결과 nameLowercase 클라이언트 측에서 추가 정렬을 수행

mQuery = mFirebaseDbReference 
    .child("listItems") 
    .child("list_1_uid") 
    .orderByChild("visible") 
    .equalTo(true);