1

나는 다른 사용자의 게시물을 게시, 삭제 및 순위 지정 (싫어하는 것처럼) 할 수있는 앱을 만들고 있습니다. 프로필 페이지에서 사용자는 자신이 좋아하는 게시물을 볼 수도 있습니다. 나는 모든 게시물을 검색 할 때까지Firebase - 랭킹 구성 시스템. 좋아하는 사람들의 역사와 함께

{ 
"ranks": { 
    "post1": { 
     "user1": "true", 
     "user2": "false", 
     "user3": "false" 
    }, 
    "post2": { 
     "user1": "true", 
     "user3": "true" 
    }, 
    "post3": { 
     "user1": "false", 
     "user2": "true", 
     "user3": "true" 
    } 
    } 
} 

모든 꽤 좋은 것 같다 : -

은 현재 내가 (같은를 들어, 싫어하는에 대한 거짓, 빈 어떠한 평가도 마찬가지) 같은 구조 무언가를 만들기 위해 생각하고 사용자가 좋아했던 예. user1은 [post1, post2]가됩니다. user2 - [post3]. 어떻게 모든 관련 순위를 삭제할 것, 내가 게시물을 삭제하면 어떻게 :

{ 
"ranks_by_user": { 
    "user1": { 
     "post1": "true", 
     "post2": "true", 
     "post3": "false" 
    }, 
    "user2": { 
     "post1": "false", 
     "post3": "true" 
    }, 
    "user3": { 
     "post1": "false", 
     "post2": "true", 
     "post3": "true" 
    } 
    } 
} 

그러나이 더욱 불편 : 다음

나는 그것을 다음과 같은 방법을 재구성하는 생각? post-n 하위가있는 ranks_by_user 목록의 모든 사용자를 찾기위한 쿼리를 찾을 수 없습니다. 이러한 구조 문제를 어떻게 해결할 수 있습니까?

답변

1

구조가 정확합니다. firebase을 사용하면 일반적으로 데이터가 중복 될 것입니다. 두 번째 질문은 삭제하는 방법과 마찬가지로 모든 것이 병합되고 외래 키가 없으므로 직접 쿼리를 연결해야합니다. 귀하의 모델에 따라 다음과 같이 작동 할 수 있습니다.

...child('ranks_by_user').orderBy('post2').equalTo(true).once('value', function(){ 
    //delete record 
}); 
...child('ranks_by_user').orderBy('post2').equalTo(false).once('value', function(){ 
    //delete record 
}); 

post2는 색인이 생성되지 않으므로 속도가 느려질 수 있습니다. 대신 첫 번째 모델을 사용자로 지정하면 해당 레코드를 쿼리하여 해당 레코드를 좋아하거나 싫어하는 사용자를 확인한 다음 다른 모델 레코드의 항목을 삭제할 수 있습니다. 이것은 나의 추천 일 것입니다. 다음은 몇 가지 코드입니다 (angular1로 완료). 그 코드는 사용자를 대신 할 것입니다.

var postId = 'post1'; 
...child('ranks').child(postId).once('value', function(snapshot){ 
    angular.forEach(snapshot.val(), function(value, userId){ 
     ...child('ranks').child(postId).child(userId).remove(); 
     ...child('ranks_by_user').child(userId).child(postId).remove(); 
    }); 
}); 
+0

답장을 보내 주셔서 감사합니다. 그래서, 두 모델을 동시에 사용할 것을 제안합니다, right (ranks_by_post와 ranks_by_user)? –

+0

도와 줘서 기쁩니다. –

관련 문제