2017-12-23 18 views
0

나는 "태그"트리와 "사용자"트리가있는 firebase 데이터베이스를 가지고 있습니다. 각 사용자는 관련 태그 (이 경우 환경 설정이 지정됨)를 연관시킵니다. 데이터베이스 구조는 그런 식이다 : 나는, 정해진 사용자에 대해, 목록에 표시 할 사용자가없는 모든 기본 설정을 원하는공통적이지 않은 데이터를 검색하는 방법

enter image description here

.

Example: 
Tags: 1, 2, 3, 4 
User has 1,3 
I want to show in a list, 2 and 4! 

나는 사용자가이 제대로 모든 환경 설정/태그를 보여 코드를 가지고,하지만 난 사용자가없는 것의 목록을 표시하는 방법을 모른다!

내가 제대로 내 문제를 설명했다 희망 (완벽하게 작동) 일반적인 환경 설정을 보여 내 코드

showUserPreferences(){ 

    let userTag = []; 
    var ref = firebase.database().ref('/users/'+ this.email+'/preferenze/') 
    var ref1 = firebase.database().ref('/tag/'); 
    ref.once('value', function(preferenze){ 
    preferenze.forEach(function(singolaPref){ 
     ref1.once('value', function(tags){ 
     tags.forEach(function (singoloTag){ 
      if(singolaPref.key == singoloTag.key){ 

      userTag.push(singolaPref.child("nome").val()) 
      } 
      return false; 
     }) 
     }) 
     return false; 
    }) 

    }).then(a=>{ 
     this.tags = userTag; 
    }) 
    } 

입니다. 더 많은 코드 또는 기타 세부 정보가 필요하면 요청하십시오. 미리 감사드립니다.

+0

어떻게 공통적 인 데이터를 검색 했습니까? –

+0

내 질문에 코드를 붙여 넣습니다. 태그 트리의 항목이 사용자의 환경 설정 트리에 있는지 확인합니다. 내 키 태그의 키 – JEricaM

+0

먼저 사용자의 환경 설정에서 태그를로드합니다. 그런 다음 태그를로드하고 이미 사용자 환경 설정에있는 태그를 필터링하십시오. – marcorei

답변

1

대략적인 코드 예제로 답을 제출할 수도 있다고 생각했습니다.

아이디어는 두 스냅 샷 (preferenzetag 컬렉션)을로드한다는 것입니다. 그런 다음 예를 들어 쉬운 조회를 위해 preferenze을지도에 저장하십시오. 그런 다음 태그를 반복 할 때이 맵을 사용하십시오.

showMissingPreferences() { 
    var preferencesRef = firebase.database().ref('/users/'+ this.email+'/preferenze/') 
    var tagsRef = firebase.database().ref('/tag/'); 

    preferencesRef.once('value') 
     .then(userPrefSnap => { 

      // Save the user's tags in a map for lookup. 
      let userPrefMap: { [key: string]: boolean } = {} 
      userPrefSnap.forEach(userTagSnap => { 
       userPrefMap[userTagSnap.key] = true 
      }) 

      return tagsRef.once('value') 
       .then((tagsSnap) => { 
        let missingTags = [] 
        tagsSnap.forEach(tagSnap => { 
         // Only push the tag if it's not in the map. 
         if(!userPrefMap[tagSnap.key]) { 
          missingTags.push(tagSnap.child("nome").val()) 
         } 
        }) 
        return missingTags 
       }) 
     }) 
     .then(missingTags => { 
      this.tags = missingTags 
     }) 
} 

오류가 발생할 수 있으므로 코드를 실행하거나 테스트하지 않았습니다. 그러나 당신이 아이디어를 얻기를 바랍니다!

+0

답변 해 주셔서 감사합니다. 귀하의 코드를 시도하고 불행히도 이것은 태그 트리에있는 모든 태그를 반환합니다. 나는 이것을 이해하려고 노력하고 있는데 왜 누락 된 태그가 반환되지는 않지만 모든 태그를 반환하는지 이해하려고합니다. – JEricaM

+0

"오류"를 발견했습니다! (! userPrefMap [tagsSnap.key]) : D 감사합니다. sososoo 많이 : D – JEricaM

+0

디버깅 해 주셔서 감사합니다! ;) – marcorei