본문 바로가기

안드로이드/자바

[안드로이드/Android]Firebase Database 데이터검색

반응형

관련 포스팅

Firebase Database 시작하기

Firebase Database 데이터 수정


 

이번 포스팅에선 Firebase Database 에 대해 다뤄볼 예정입니다.

 링크에 간단하게 사용 방법에대해 포스팅한적 있었는데, 오늘은 사용해보면서 알게된점에 대한 내용이고 데이터 검색에 관한 내용입니다.

결과적으로 먼저 말씀드리자면 Firebase Database는 굉장히 제한적 입니다. 많은걸 기대한건 아니지만, 생각보다 심플한 조작 이외에는 제공하지 않습니다.




 1. 데이터 정렬은 기본 오름차순이며 내림차순을 제공하지않습니다.

말 그대로 'order by'를 제공하지 않습니다. 데이터를 select 할때 오름차순 , 내림차순 기능을 제공하지 않아 랭킹등을 나열하기엔 

2차 가공이 따로 필요합니다.  하지만 오름차순 구현은 가능합니다.


2. 다중 조건절을 사용할 수 없습니다.

단일 조건절에의한 검색을 제공하며 다중 조건절은 사용할 수 없습니다.




orderByChild(


orderByChild를 사용하여 원하는 키값이 포함된 데이터를 가져옵니다. 검색한 데이터는 오름차순 및 사전순이 기본이며 변경은 불가능합니다.

(firebase Database는 기본적으로 키와 값으로 이루어진 심플한 구조를 갖고있습니다.)

height에 해당하는 키값이 포함된 데이터를 가져옵니다. 

 

query = databaseReference.child(key).orderByChild("height")


orderByKey()

 

포괄적으로 키 값을 기준으로 데이터들을 정렬합니다. 전체적으로 데이터를 훑어볼때 사용할 수 있을꺼 같습니다.

하지만 저는 실질적으로 사용하진 않고 간단한 테스트만 해봤습니다


Firebase.getInstance().getDatabaseReference("key").child("chlid key").orderByKey().addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.e("mainactivity", "key=" + dataSnapshot.getKey() + ", " + dataSnapshot.getValue() + ", s=" + s);
}

}


orderByValue()


orderByKey 와 동일하게 작동하지만 정렬시 기준을 키 에 두느냐 실질적 값에 두느냐가 차이가 납니다. 


Firebase.getInstance().getDatabaseReference("key").child("chlid key").orderByValue().addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.e("mainactivity", "key=" + dataSnapshot.getKey() + ", " + dataSnapshot.getValue() + ", s=" + s);
}

}

예를들어 


다음과 같은 데이터에서 '동물'이라는 키에 강아지에 대한 데이터를 검색할때 

orderByValue를 사용하면 키가 먼저 나오고 다음으로 몸무게가 나올 것이고 

orderByKey를 사용하면 몸무게가 먼저 나오고 키 값이 먼저 나올 것 입니다.



limitToFirst() 와 li limitToLast()


두 메소드는 결과값 개수를 제한합니다. 메소드명에서 알 수 있듯이 limitToFirst(5)는 결과값을 처음부터 5개 까지 불러오고 limitToLast(5) 는 마지막 5개만 불러옵니다. 



startAt(), endAt() 

 

두 메소드는 결과값의 범위를 정해줍니다.

결과값은 오름차순으로만 출력되며 내림차순으로 변경은 불가능합니다.

다음은 키 데이터에 'height'이라는 하위키의 값이 0~5 사이인 데이터의 스냅샷을 불러옵니다.


query = databaseReference.child(key).orderByChild("height").startAt(0).endAt(5);


equalTo()

 

자바에서 흔히 사용하는 메소드와 동일하게 파라미터값과 동일한 것을 검색해주는 메소드입니다.






결과적으로 firebase database는 최소한(?)의 기능만을 제공합니다. 사실상 저는 데이터를 가공한다는 말은 어울리지 않는거 같습니다.


일반적으로 다중 조건문이 가능한 타 데이터베이스에 비하면 단일 조건문만 가능한 firebase는 활용처가 극히 일부분이기 때문에 제약이 많습니다.


그래서 사용하시기전 구현할 기능에대해 좀 더 심도있게 고민후 적용하시길 추천합니다.

반응형