此前,火力地堡需要你生成自己的索引或下載在一個位置的所有數據,以查找和檢索匹配一些子屬性的元素(例如,所有用戶name === "Alex"
)。
2014年10月,Firebase通過orderByChild()
方法推出了新的查詢功能,使您能夠快速高效地完成此類查詢。請參閱下面的更新答案。
向Firebase寫入數據時,有幾個不同的選項會反映不同的用例。在高層次,火力地堡是一個樹形結構的NoSQL數據存儲庫,並提供了一些簡單的圖元用於管理數據的列表:
ref.child('users').child('123').set({ "first_name": "rob", "age": 28 })
:
寫了一個獨特的,已知的關鍵火力點
追加到將自動按時間排序寫有一個自動生成的密鑰列表:
ref.child('users').push({ "first_name": "rob", "age": 28 })
聽用於通過其獨特的,已知路徑中數據的變化:
ref.child('users').child('123').on('value', function(snapshot) { ... })
過濾或順序在列表數據由鍵或屬性值:
// Get the last 10 users, ordered by key
ref.child('users').orderByKey().limitToLast(10).on('child_added', ...)
// Get all users whose age is >= 25
ref.child('users').orderByChild('age').startAt(25).on('child_added', ...)
With t他增加了orderByChild()
,你不再需要爲子屬性查詢創建自己的索引!例如,檢索所有用戶名爲「亞歷克斯」:在火力地堡
ref.child('users').orderByChild('name').equalTo('Alex').on('child_added', ...)
工程師在這裏。在將數據寫入Firebase時,您有幾個不同的選項可以反映不同的應用程序使用情況。由於Firebase是NoSQL數據存儲區,因此您需要使用唯一鍵存儲數據對象,以便您可以直接訪問該項目,或者在特定位置加載所有數據並遍歷每個項目以查找您正在查找的節點對於。有關更多信息,請參閱Writing Data和Managing Lists。
當您在火力地堡寫數據時,您可以使用一個獨特的,定義的路徑(即a/b/c
),或push
數據到一個列表,它會生成一個唯一的ID(即a/b/<unique-id>
),並允許你進行排序set
數據和按時間查詢該列表中的項目。您在上面看到的唯一ID是通過調用push
將一個項目追加到列表online-b-cards/users
生成的。
而不是在這裏使用push
,我建議使用set
,並使用唯一密鑰(例如用戶的電子郵件地址)存儲每個用戶的數據。然後,您可以通過Firebase JS SDK導航至online-b-cards/users/<email>
直接訪問用戶的數據。例如:
function escapeEmailAddress(email) {
if (!email) return false
// Replace '.' (not allowed in a Firebase key) with ',' (not allowed in an email address)
email = email.toLowerCase();
email = email.replace(/\./g, ',');
return email;
}
var usersRef = new Firebase('https://online-b-cards.firebaseio.com/users');
var myUser = usersRef.child(escapeEmailAddress('[email protected]'))
myUser.set({ email: '[email protected]', name: 'Alex', phone: 12912912 });
注意,由於火力地堡不引用允許某些字符(見Creating References),我們刪除了.
,並在上面的代碼中,
替換它。
試試這個:http://stackoverflow.com/questions/32886546/how-to-get-all-child-list-from-firebase-android/36600791#36600791 – 2016-04-17 20:54:46