【问题标题】:query a keyword in Firebase database在 Firebase 数据库中查询关键字
【发布时间】:2017-06-16 16:11:04
【问题描述】:

支持我有一个如下数据库:

{
  "eventAttendees" : {
    "fm" : {
      "9" : "Alice",
      "23" : "Khanh",
      "43" : "Bach"
    }
  },
  "events" : {
    "fm" : {
      "date" : "2017-06-16",
      "name" : "I love Firebase Meetup in Tokyo yesterday". 
    },
    "gm" : {
      "date" : "2017-08-12",
      "name" : "Meet Linh"
    }
  },
  "users" : {
    "1" : {
      "name" : "David"
    },
    "2" : {
      "name" : "Alice"
    },
    "10" : {
      "name" : "Khanh"
    }
  }
}

如果我查询关键字“Firebase Meetup”,它会起作用。

let query = ref.child("events").queryOrdered(byChild: "name").queryEqual(toValue: "Firebase Meetup").queryLimited(toFirst: 1)
        query.observe(.value, with: { (snapshot) in
             let content = snapshot.value as? [String : AnyObject] ?? [:]
            print(content)

->返回

["fm": {
    date = "2017-06-16";
    "name" : "I love Firebase Meetup in Tokyo yesterday". ;
}]

但如果我查询关键字“Firebase”,它不起作用。

是否可以查询“Firebase”并获得如下结果?

 ["fm": {
            date = "2017-06-16";
            "name" : "I love Firebase Meetup in Tokyo yesterday". ;
        }]

【问题讨论】:

标签: firebase firebase-realtime-database


【解决方案1】:

你可以使用 startAt() 函数:

let query = ref.child("events").queryOrdered(byChild: "name").queryStart(at: "I love Firebase").queryLimited(toFirst: 1)
        query.observe(.value, with: { (snapshot) in
             let content = snapshot.value as? [String : AnyObject] ?? [:]
            print(content)

这里有文档https://firebase.google.com/docs/reference/js/firebase.database.Query#startAt

此外,如果您想从 Firebase 开始或以 Meetup 结束,只需执行以下操作:

let query = ref.child("events").queryOrdered(byChild: "name").queryStart(at: "Firebase").queryEnd(at: "in Tokyo yesterday").queryLimited(toFirst: 1)
        query.observe(.value, with: { (snapshot) in
             let content = snapshot.value as? [String : AnyObject] ?? [:]
            print(content)

这里有文档https://firebase.google.com/docs/reference/js/firebase.database.Query#startAt

【讨论】:

  • startAt 将起作用,因为“Firebase”位于字符串的开头。如果我查询“Meetup”怎么办?
  • @John,在你的问题中,这就是你要问的,或者我错了?你想达到什么目标?
  • @John 我更新了答案,如果这是你所期望的,请告诉我:)
  • 嗨。对于令人困惑的问题,我很抱歉。我的意思是如果“名称”是:“我喜欢昨天在东京举行的 Firebase 聚会”。 .queryStart(at: "Firebase").queryLimited(toFirst: 1) 可以返回相同的结果吗?
  • 不不,您需要在这种情况下添加“我爱 Firebase”@John,仅此而已:)
猜你喜欢
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
相关资源
最近更新 更多