我想知道它是否可能以及如何搜索firebase.
我的应用程序有一个文本字段,您可以在其中填写一些通过数组“保存”的规范.
例如:
var arrayOfSpecs = ["13'", "Black"]
现在我想搜索2个分段选项:
>搜索规格为13“或黑色”的Elektronics之一的名称(此elektronic设备可能有其他规格;但必须包含至少一个给定的规格)
>搜索其中一个仅具有我编写的规格的Elektronics的名称,较少的规格是可以的,但没有比搜索到的人更多的规格.
示例:搜索“black”“13inch”; searchResults可以包含一个带有一个规格的macbook:“black”,但它也可能包含一个带有2个规格的macbook Pro:“black”和“13inch”,但它不能包含带有规格的macbook Air:“Black”,“ 13英寸“,”Retina“
searchResult会出现在tableview中,或者会将searchResults的正确名称存储在数组中,我会把它放在UITableView中
在我的数据库下面,我希望你能理解我在寻找什么.
谢谢
最佳答案 将您的JSON结构更改为
Electroniks:{
Macbook:{..,
Specification:{
13inch : true,
black : true
},
...
},
iPhone:{..,
Specification:{
13inch : true,
black : true,
camera : true
},
...
},
iPad:{..,
Specification:{
xinch : true,
red : true,
camera : true
},
...
}
}
我不认为你可以同时匹配两个节点查询,但你可以,你可以一次匹配一个规范.queryEqualToValue
因此,解决方法是: – 检索具有一个特定规范的所有parentNode,然后迭代这些以匹配您的其他规范
let parentRef = FIRDatabase.database().reference().child("Elektronics")
parentRef.queryOrderedByChild("Specification/black").queryEqualToValue(true).observeSingleEventOfType(.Value, withBlock: {(snap) in
if let dict = snap.value as? [String:AnyObject]{
for each in dict{
print(each.0) //Would retrieve you every product name with colour black in specification i.e Macbook and iPhone
print((each.1["Specification"] as! NSDictionary).count)//Number of specification
parentRef.child("each.0").child("Specification").child("13inch").observeSingleEventOfType(.Value, withBlock: {(snapshot) in
if snapshot.exists(){
print(each.0) //You found your product's with exactly 13inch and black Specification.This is their name
}
})
}
}else{
print(snap.ref)
}
})