2015-07-11 73 views
1

比方說,我有我的火力地堡這樣的數據:火力地堡 - 搜索一個孩子按值

https://mygame.firebaseio.com/player

{ 
    "player": { 
    "bloodgulf01": { 
     "username": "bloodgulf01", 
     "uid": "twitter:102032", 
     "level": 2, 
     "map": 3, 
     "x": 51, 
     "y": 12 
    }, 
    "damjanovic": { 
     "username": "damjanovic", 
     "uid": "github:77371", 
     "level": 5, 
     "map": 2, 
     "x": 21, 
     "y": 44 
    } 
    } 
} 

我怎麼會由uid搜索和獲取結果的snapshot

這是我曾嘗試:

new Firebase("https://mygame.firebaseio.com/player") 
    .startAt(authData.uid) 
    .endAt(authData.uid) 
    .once('value', function(snap) { 
     console.log('accounts matching UID of ' + authData.uid, snap.val()) 
    }); 

將返回:accounts matching UID of github:123456789 null儘管擁有uid/player/數據裏面......

回答

1

請記住,一切都在火力地堡是一個URL。所以,你可以做到這一點,以獲得數據,你想:

'https://mygame.firebaseio.com/player/' + uid 
+0

是的,但它們不是作爲UID存儲,而是作爲玩家的用戶名登錄 –

+0

@DanF爲什麼不把用戶名存儲在相反的uid instad下?由於uid始終是唯一的,因此比存儲鍵作爲玩家名稱更好。 – Chrillewoodz

+2

@Chrilliewoodz我想,但後來我不知道如何搜索數據庫中的用戶名...。 –

4

排序要篩選,然後子Filter:

new Firebase("https://mygame.firebaseio.com/player") 
    .orderByChild('uid') 
    .equalTo(authData.uid) 
    .once('child_added', function(snap) { 
    console.log('account matching UID of ' + authData.uid, snap.val()) 
    }); 

既然你只希望一個球員,你可以可能會通過once('child_added'。如果你需要用相同的UID,以處理潛在多個玩家,則:

.on('child_added', function(snap) { 
    console.log('account matching UID of ' + authData.uid, snap.val()) 
    }); 

或者

.once('value', function(snap) { 
    snap.forEach(function(child) { 
     console.log('account matching UID of ' + authData.uid, child.val()) 
    }); 
    }); 

我與Chrillewoodz在結構上,雖然我會總是希望看到的uid爲一個用戶集合的關鍵。在這種情況下,您可以使用上述方法搜索名稱。