2016-06-03 3 views
1

사용자를위한 대화방 노드를 만들려고합니다. fromto 사용자 ID가있는 노드가 있습니다. 새 방을 만들기 전에 'from'이 호스트이고 '&'이 'host'이고 'from'이 상대 인 경우 양쪽 모두를 확인해야합니다. 내가하고 싶은 것은 기본적으로Firebase로 다중 질의 검색

- Rooms 
    - "id1" 
     - from: 2 
     - to: 1 

: 같은

노드 보인다

모든 객실에서

선택 곳 = 1과에 = 2 =로에서 = 2 또는

단일 쿼리에서 두 경우를 모두 확인할 수있는 방법이 있습니까? Firebase로 복잡한 질의 데이터의 본질을 이해하는 것을 혼란스러워합니다.

+1

이 1 : 1 대화를 처리하는 가장 간단한 방법은 참여 사용자 다음에 방 이름을 지정하는 것입니다. 예를 보려면 http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channels-in-firebase를 참조하십시오. –

+0

와우. 그것은 훌륭합니다. 고맙습니다! 이렇게하면 '대화방 + 대화방'을 결합하고 하나의 테이블 만 가질 것을 제안 하시겠습니까? 또는 같은 테이블에 메시지와 객실이있는 경우 성능에 좋지 않습니까? – senty

+0

동일한 참가자가 같은 채팅방에 머물게하는 방법입니다. 본질적으로 방은 단지 "명명 된 대화"입니다. 또는 그 반대의 경우 : 대화는 실제로 "방 이름으로 uid를 사용하는 방"입니다. 사용자가 한 번에 한 회의 또는 대화를보고있는 경우 성능에 문제가 없습니다. 그 해결책이 있다면, 나는이 질문을 중복 된 btw로 표시 할 것이다. –

답변

2

것 중포 기지에서 두 개의 서로 다른 어린이에 의해 조회 할 수있는 유일한 방법으로 조회하는 직접적인 방법은 없습니다 :

myRefToRooms.orderByChild('from').equalTo($user_id) 
각 방에 만들어집니다 쿼리 아이를 만들 수 있다고 말했다

이 UID :

rooms:{ 
    $room_id:{ 
    from:$user_from, 
    to:$user_to, 
    query:$userfrom_$userto 
    } 
} 

둘 다 기준과 일치하는 모든 값을 얻을 수있는이 방법

myRefToRooms.orderByChild('query').equalTo($user1_$user2) 

또한 쿼리에서 startAt() 및 endAt() 메소드를 사용하여 정확히 일치하는 항목을 찾을 수있을뿐만 아니라 "from user"가 같은 모든 객실 또는 "to user"가 동일한 모든 객실

이 방법이 마음에 들지 않으면 데이터베이스를 다른 방식으로 구성하여 간단한 쿼리를 작성해야합니다.

+0

'query : $ userfrom_ $ userto'는 재미있어 보이지만 어떻게 달성했는지 알 수 없습니까? 문자열로 결합하고 폭발시키는 것입니까? 서로 다른 노드와 대화를 다른 방에 만들 계획이었습니다 – senty

+0

네가 문자열로 결합하면 구조를 만드는 데 여러 가지 방법이 있으며 각각 고유 한 프로와 콘이 있습니다. 예를 들어이 방법은 방이 "to"와 "from"사이에 1-1 관계가 있으면 사용하려는 구조를 추가 할 수 있습니까? – Ymmanuel

+0

위의 코멘트 섹션에서 Frank의 대답은 내가 생각하기에 1-1 구조를 만드는 훌륭한 접근 방법입니다. 감사합니다 – senty