搜索firebase数据:iOS,Swift

我想知道它是否可能以及如何搜索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中

在我的数据库下面,我希望你能理解我在寻找什么.

谢谢

《搜索firebase数据:iOS,Swift》

最佳答案 将您的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)

          }
        })
点赞