2016-04-28 24 views
0

我的火力用戶樹具有這樣的結構:查詢數據

用戶:

{ 
{ 
'userName': 'abc', 
'userEmail' : '[email protected]', 
'userPreferences': 
    [ 
    0:'Cinema', 
    1:'It' 
    ] 
    }, 
    { 
'userName': 'abc', 
'userEmail' : '[email protected]', 
'userPreferences': 
    [ 
    0:'Cinema', 
    1:'Music' 
    ] 
} 
} 

於是,我試圖找到所有用戶他們的首選項列表包含「電影」。
我試試這個代碼:

var ref1 = new Firebase("https://event-application.firebaseio.com/users"); 
$scope.user = $firebaseArray(ref1.orderByChild("userpreferences").equalTo('Cinema')); 
console.log($scope.user); 

但我沒有得到最好的結果。我得到這樣的記錄: enter image description here

+1

什麼* 「我沒有得到最好的解決方案」 *手段? – Bigood

回答

1

你的JSON結構顯示偏好爲userPreferences,所以不會有以下工作?

var ref1 = new Firebase("https://event-application.firebaseio.com/users"); 
$scope.user = $firebaseArray(ref1.orderByChild("userPreferences").equalTo('Cinema')); 
console.log($scope.user); 

不過,我覺得也有你的代碼另外一個問題,你是被稱爲.equalTo('Cinema')但是你比較它與一個數組,糾正我,如果我錯了,但我不認爲行爲.equalTo('Cinema')是循環遍歷每個值並進行比較,我認爲這只是一個直接比較

如果是這種情況,您可能需要通過從Firebase讀取數據並通過操作來構建自定義查詢函數可用於快照

+0

謝謝你的回答。我編輯了我的帖子。是的,這是我的問題,我沒有找到如何比較.equalTo('Cinema')和數組。我必須保持相同的數據結構 –

+0

@SihemHcine你想讓我從firebase讀取數據? – Grant

+0

當然是主席先生,您能否給我您的郵件 –

1

在NoSQL中,您經常會得到一個反映該數據模型的數據模型您的應用程序使用數據的方式。如果你想閱讀所有對電影的偏好的用戶,你應該模式,在你的樹:

users: { 
    'uid-of-abc': { 
    'userName': 'abc', 
    'userEmail' : '[email protected]', 
    'userPreferences': [ 
     0:'Cinema', 
     1:'It' 
    ] 
    }, 
    'uid-of-def': { 
    'userName': 'def', 
    'userEmail' : '[email protected]', 
    'userPreferences': [ 
     0:'Cinema', 
     1:'Music' 
    ] 
    } 
}, 
"preferences-lookup": { 
    "Cinema": { 
    "uid-of-abc": true, 
    "uid-of-def": true 
    }, 
    "It": { 
    "uid-of-abc": true 
    }, 
    "Music": { 
    "uid-of-def": true 
    } 
} 

現在,你可以找出哪些用戶喜歡電影院:

ref.child('preferences-lookup/Cinema').on('value', function(snapshot) { 
    snapshot.forEach(function(userKey) { 
    console.log(userKey.key()+' prefers Cinema'); 
    }); 
}); 

這是覆蓋在這blog post on denormalizing data with Firebase,在Firebase documentation on structuring data和在這裏堆棧溢出的幾十個答案。有幾個:

+0

謝謝您的支持:)但是在我的應用程序結構(代碼)中,我沒有定義Cinema的偏好。 –