【问题标题】:Firebase Query Under AutoID Under Child Swift子 Swift 下 AutoID 下的 Firebase 查询
【发布时间】:2017-10-27 23:14:51
【问题描述】:

你好!我正在尝试进行两个 Firebase 查询:

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

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

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

对此最合乎逻辑的方法是什么?

【问题讨论】:

  • 我认为您需要在一个选项卡下构建信息数据。如果您想要更多的 NoSQL 方法,您可以只使用 firestore 而不是实时数据库。除非您要执行主要查询,否则拆分信息没有多大意义。完成后,您可以轻松执行“queryorderbyKey()”
  • 我实际上需要在数据库中进行搜索,以便找到一些带有 LIKE 子句的用户,而不仅仅是 =... 所以我想我会在 Firebase Firestore 和 Firebase 数据库之间拆分一些数据。谢谢!
  • 不建议同时使用这两种方法,因为您必须处理数据存储之间的大量数据处理。重要的是您的数据模型/架构。

标签: swift firebase firebase-realtime-database


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 2017-12-05
    • 2022-01-02
    • 2018-01-25
    相关资源
    最近更新 更多