ios - Firebase iOS -.queryOrdered().queryEqual(toValue : and child(). observeSingleEvent 之间有什么区别

标签 ios swift firebase firebase-realtime-database

在 Firebase 中搜索用户名(或任何与此相关的搜索)时有什么区别 .queryOrdered().queryEqual(toValue:child().observeSingleEvent(

我看了下面@Frank van Puffelen 的回答和评论

these comments他说要使用:

reference.child("usernames").child(usernameYourSearchingFor).observeSingleEvent(of: .value, with: { (snapshot) in

    if snapshot.exists() { ... } else { ... }
})

但是在this answer他回答说:

ref.child("users").queryOrdered(byChild:"username").queryEqual(toValue: usernameYourSearchingFor).observeSingleEvent(of: .value, with: { snapshot in

    if snapshot.exists() { ... } else { ... }
})

使用这两种方法搜索数据库时,速度和效率之间是否存在差异,或者仅仅是使用 2 种不同的方法来实现相同的确切目标?

最佳答案

基本上,这些操作适用于两种不同的数据结构。

在第一个中,您将拥有与此类似的数据结构:

{
  "usernames": {
    "usernameYourSearchingFor": {
      // some data
    },
    "otherUsername": {
      // different data
    }
  }
}

如您所见,您要搜索的用户名是“用户名”节点下的一个键。您可以通过调用 child() 直接访问它功能。 (然后附加一个事件观察器)


现在在第二个结构中:

{
  "users": {
    "user1": {
      "username": "usernameYourSearchingFor",
      "email": "user1@email.com"
    },
    "user2": {
      "username": "otherUsername",
      "email": "user2@email.com"
    }
  }
}

用户名其实是属于User对象的一个​​属性。您无法直接访问它,因此您需要 query “用户”节点,以便找到您要搜索的用户名,因此需要 .queryOrdered(byChild:"username").queryEqual(toValue: usernameYourSearchingFor)

关于ios - Firebase iOS -.queryOrdered().queryEqual(toValue : and child(). observeSingleEvent 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51469816/

相关文章:

ios - 我应该使用哪个类在 View 之间滑动?

ios - UITableViewCell 委托(delegate) indexPath

firebase - Firebase 中的 Varnish 错误导致我的网站从 Google 索引中消失

javascript - JSON Firebase URL 到数组

ios - 自动布局中固定和对齐之间的区别?

ios - 如何在 objective-c 中使用 for 循环显示存储在数组中的值

iphone - 如何使用具有一定随机性的 CAReplicatorLayer 创建 Spark 效果?

ios - 如何在 UITableViewCell 上保留 subview

ios - CoreData 更新 Model.xcdatamodeld 后删除所有对象

firebase - Firebase v3 updateProfile方法