您好!我正在尝试制作两个Firebase查询:
basicInfo
下的所有子项,一次为多个用户提供(查询限制为20个结果)。例如,在使用上述数据库的此查询中,我将获得basicInfo
的所有-Kwz1eoUMPym...
部分以及-Kwzhj4pzBJxbb...
基本信息下的所有儿童name == (some name)
。
对于这两个查询,我无法理解如何在AutoID键和name
键下查询basicInfo
查询。
最符合逻辑的方法是什么?
答案 0 :(得分:2)
Firebase实时数据库是一个NoSQL数据库,只能通过列表中子项的直接后代进行过滤。因此,您需要使用更扁平的数据结构,并避免将字段拆分为basicInfo
,fullInfo
:
users
|- userId
|- name: "John"
|- age: 17
|- gender: "m"
|- birthday: "10.10.2000"
...
使用此方法,您可以将侦听器附加到users
节点,然后使用queryOrderedByChild
和queryEqualToValue
方法按子值进行过滤。例如,Swift中的类似内容:
Database.database().reference().child("users").queryOrderedByChild("name").queryEqualToValue("(some name)").observeSingleEventOfType(.Value, with: { snap in
// Do your thing with snap
})
使用您的任何一种结构,您都可以使用queryLimitedToFirst
和queryLimitedToLast
方法限制结果。例如,来自filtering data section of the documentation:
以下示例演示了示例博客应用如何检索所有用户最近发布的100篇帖子的列表:
// Last 100 posts, these are automatically the 100 most recent // due to sorting by push() keys let recentPostsQuery = (ref?.child("posts").queryLimited(toFirst: 100))!
有关在Swift / iOS中过滤和限制Firebase数据的详细信息,请参阅working with lists of data on iOS documentation。