此前,火力地堡需要你生成自己的索引或下载在一个位置的所有数据,以查找和检索匹配一些子属性的元素(例如,所有用户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