我是firebase的新手,我试图使用queryStartingAtValue搜索产品的标题.在我的firebase JSON和下面的代码中,我有几个层次需要跨越。它看起来像->/item/(部分名称:服装,游戏等)/autoID/(产品名称,价格)我能够一直使用for循环接收结果,直到找到特定的字符串,但它看起来不太好。我想知道是否queryStartingAtValue可以缩短遍历子元素的次数,或者至少如何正确使用queryStartingAtValue非常感谢你的帮助!!由于
迅速
Database.database().reference().child("item").queryStarting(atValue:"Adidas").observeSingleEvent(of: .value) { (snapshot) in
for snap in snapshot.children {
if let snap = snap as? DataSnapshot {
if let childItem = snap.value! as? [String: Any] {
for key in childItem {
if let item = key.value as? [String: Any] {
if let title = item["Title"] as? String {
if title.contains("adidas") {
print("found")
}
}
}
}
}
}
}
}
重火力点JSON{
"item": {
"Clothing": {
"-NFrGoNiI4zX-QBgEwkf": {
"Price": 345,
"Title": "Adidas",
"availableQty": "100"
}
},
"Games": {
"-NFrGdmdV4FOBI34EnOW": {
"Price": 199,
"Title": "Overwatch Platinum Pack",
"availableQty": "100"
},
"-NGL4vk1GC80ojMgZNik": {
"Price": 66,
"Title": "Overwatch 2",
"availableQty": "100"
}
}
}
}
Firebase实时数据库查询由两步组成:
- 首先按键、值或子属性对子节点排序。
- 然后使用
startAt
/endAt
/startAfter
/endAfter
/equalTo
对该数据进行切片。
您的代码包含#2,但它不包含任何排序指令,这意味着数据库根据节点的键对节点进行排序。
您将需要在Title
子属性上包含一个指令来订购:
Database.database().reference()
.child("item")
.queryOrdered(byChild: "Title") // 👈
.queryStarting(atValue:"Adidas")
.observeSingleEvent(of: .value) { (snapshot) in
如果你需要一个强大的搜索引擎为firebase- commerce-app,你可以使用Algolia
-
采取免费计划到algolia
-
Algolia与firebase云功能(非常容易!)文章算法与云函数
-
Algolia with swiftalgolia-swift