몇 가지 생각. 나는 당신이 그것을 쿼리하기를 원하는 몇 가지 방법이 있기 때문에 아마 데이터를 비정규화할 것이다. 답변을 짧게 유지하기 위해 의사 코드를 사용 중입니다.
이 달의 모든 날짜와 시간을 사용자에게 표시합니다.
여기에서는 두 개의 하위 노드로 쿼리합니다. 그 중 하나는 특정 사용자이고 다른 하나는 일정 범위입니다. 이 솔루션은 구조 UID 및 YYMM (년 월)의 화합물 질의 여기
것입니다 :
jobs
job_0
start: 170518090135
end: 170518170515
uid_yymm: uid_0_1705
uid: uid_0
company_id: company_0
comp_status: company_0_true
job_1
start: 1705190835
end: 17051910430
uid_yymm: uid_0_1705
uid: uid_1
company_id: company_0
comp_status: company_0_false
queryOrdered(byChild: "uid_yymm").queryEqual(to value: "uid_0_1705")
이가되는 2017 달되는 해에 uid_0에 대한 모든 작업을 조회합니다 05.
회사 이름이 동일하고 현재 작동하는 모든 사용자를 당깁니다 ( 입력란이 가득 차고 입력란 시계가 비어 있음).
데이터가 없으면 NoSQL을 사용하여 작업을 더 복잡하게 만들 수 있으므로 완전히 피할 것입니다. 다시 복합 쿼리는 comp_status 노드에서 위의 구조로 작업을 수행합니다.
queryOrdered(byChild: "comp_status").queryEqual(to value: "company_0_true")
이 쿼리는 clock_ (true) 인 company_0에서 근무하는 모든 사용자를 반환합니다. uid_1의 경우와 같이 시계가 사라지면 company_0_false로 설정됩니다. 모든 사용자에 대해 가지고 가 중복 삭제
풀 목록의 모든 회사 이름은 (단지 회사의 이름으로 프로젝트의 다른 아이를 만들기 위해 더 나은 무엇입니까?)
이것은 다소 모호하지만 대답은 예라고 생각합니다. 별도의 회사 이름 노드가 있지만 사용자 노드의 회사에 대한 참조는 보관하십시오.
Database
users
3iHTIn1MicMdPbgEV6nnMy5ijHq1
company: "company_0"
email: "[email protected]"
name: "Tom"
type: "Employee"
6889js9i99s9ksij8asd88as8d8
company: "company_1"
email: "[email protected]"
name: "bill"
type: "Employee"
companies
company_0
comp_name: "Electric Company"
company_1
comp_name: "Bad Company"
출처
2017-05-19 19:56:50
Jay
Firebase 구조의 스 니펫을 텍스트로, 이미지없이 포함하십시오. 이미지를 검색 할 수 없으므로 이미지를 답안의 일부로 사용해야하는 경우 텍스트를 사용하면 다시 타이핑하는 대신 복사하여 붙여 넣을 수 있습니다. 또한 링크가 끊어 지므로 링크가 연결되지 않습니다. – Jay
모든 쿼리는 두 구조 중 하나를 사용하여 수행 할 수 있습니다. 두 개의 추가 하위 노드가 필요합니다. 두 가지 방법으로 복합 쿼리를 수행 할 수 있습니다. 검색어 # 3은 분명하지 않습니다. – Jay
안녕하세요, Jay, Firebase 구조를 텍스트로 업데이트합니다. 감사합니다! –