2017-10-18 2 views
0

는 이메일과 같은 다른 자격 증명 외에 (십진수도 형식의 위도 & 경도) 등 내가 지금처럼 데이터베이스에 users 테이블에있는 모든 사용자의 계정 정보를 저장위치를 키로 사용하여 firebase 데이터베이스에 사용자를 저장해야합니까?</p> <p><a href="https://i.stack.imgur.com/wIXnE.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/wIXnE.png" alt="enter image description here"></a> :

각 사용자가 위치를 가지고 있다고 가정 문자열 "W9ulK6s이 ..."사용자의 uid, 당신은 + 기호를 클릭하면,이 사용자에 대한 자세한 정보를 볼 것이다

사용자는 지리적으로 가까이에있는 다른 사용자를 볼 수 있으므로 각 사용자의 다른 복사본을 users_location이라는 테이블에 저장해야한다고 생각합니다. 이렇게하면 모든 사용자를 거치지 않고도 위치를 기반으로 사용자를 필터링 할 수 있습니다 데이터베이스에있는 사용자.

그러나이 시점에서 뭘해야할지 모르겠다. firebase는 키가 . 인 것을 허용하지 않으므로, 위도 나 경도를 키로 사용할 수 없다. 예를 들어 나는 다음과 같이 할 수 없다. 이 : (-80.1234567, 40.1234566) 현재 사용자의 위치는 가정, 위도와 경도 그래서

users_location 
     40.1234567 // this path contains ".", which is not allowed 
      -80.1234567 // neither is this path 
       W9ulK6sUXnVq6VVOlSWhRoVjS6t2 
        email: "[email protected]" 
        photoURL: "https://stackoverflow.com" 
        ... // Other credentials 

, 무엇을해야 난 아직도 그 위치하여 사용자를 필터링 할 수 있도록 같은이 users_location 모양의 구조?

답변

1

소수점 자리수를 고려할 때 두 좌표가 정확히 동일 할 가능성은 거의 없습니다. 이렇게하는 적절한 방법은 단순히 사용자를 저장하고 키에 위치를 지정하는 것입니다.

users 
    W9ulK6sUXnVq6VVOlSWhRoVjS6t2 
    email: "[email protected]" 
    photoURL: "https://stackoverflow.com" 
    latitude: 40.1234567, 
    longitude: -80.1234567, 
    ... // Other credentials 

다음과 같이이 경로에 대한 쿼리를 수행합니다. 이 문제의 유일한 어려움은 두 가지 방법으로 쿼리 할 수 ​​없다는 것입니다. 둘 중 하나를 통해 쿼리 한 다음 쿼리 클라이언트 측을 통해 실제로 필요한 것을 파악해야합니다.

ref.child('users').orderByChild('latitude').equalTo(40.1234567); 
.... 
results = data.filter((item) => { item.longitude === -80.1234567}); 

여러 필드로 쿼리하려는 경우 Firebase이 제대로 작동하지 않습니다. 그러나 새로운 Firestore는 두 가지 이상에 대해 쿼리 할 수는 있지만 현재이 제품은 베타 테스트 중입니다.

+0

@Ramzi C.에 감사하지만 너무 느리지 않습니까? 1 백만 명의 사용자가 있다면 어떻게 될까요? 왜냐하면 나는 그것들 모두를 선택하고 그들의 위도 우선으로 정렬하기 때문입니다. –

+1

파이어베이스는 '주문하기'가 실제로 매우 빠른 행동을합니다. 시스템 자체가 어떻게 처리되는지는 모르겠지만 일종의 인덱싱 마법이있을 것입니다. –

관련 문제

 관련 문제