在儿童Swift下的AutoID下的Firebase查询

时间:2017-10-27 13:33:21

标签: swift firebase firebase-realtime-database

My Firebase Database

您好!我正在尝试制作两个Firebase查询:

  1. basicInfo下的所有子项,一次为多个用户提供(查询限制为20个结果)。例如,在使用上述数据库的此查询中,我将获得basicInfo的所有-Kwz1eoUMPym...部分以及-Kwzhj4pzBJxbb...

  2. 基本信息下的所有儿童name == (some name)

  3. 对于这两个查询,我无法理解如何在AutoID键和name键下查询basicInfo查询。

    最符合逻辑的方法是什么?

1 个答案:

答案 0 :(得分:2)

Firebase实时数据库是一个NoSQL数据库,只能通过列表中子项的直接后代进行过滤。因此,您需要使用更扁平的数据结构,并避免将字段拆分为basicInfofullInfo

users
|- userId
   |- name: "John"
   |- age: 17
   |- gender: "m"
   |- birthday: "10.10.2000"
   ...

使用此方法,您可以将侦听器附加到users节点,然后使用queryOrderedByChildqueryEqualToValue方法按子值进行过滤。例如,Swift中的类似内容:

Database.database().reference().child("users").queryOrderedByChild("name").queryEqualToValue("(some name)").observeSingleEventOfType(.Value, with: { snap in  
    // Do your thing with snap
})

使用您的任何一种结构,您都可以使用queryLimitedToFirstqueryLimitedToLast方法限制结果。例如,来自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