【问题标题】:select Firebase data with queryOrdered(byChild: "name") queryEqual使用 queryOrdered(byChild: "name") queryEqual 选择 Firebase 数据
【发布时间】:2018-02-21 03:23:27
【问题描述】:

我想从我的 firebase 表中选择一个特定的名称(看图片)。要打印的结果始终为空。所选名称应为“manni”。我的代码有什么问题?非常感谢。

   @IBAction func BTSelect(_ sender: Any) {

   DBref = Database.database().reference()

    let query = DBref?.queryOrdered(byChild: "name").queryEqual(toValue: "manni")
    query?.observe(.value, with: { (snapshot) in
        for childSnapshot in snapshot.children {
            print("childSnapshot:->  \(childSnapshot)")
        }
    })

}

]1

【问题讨论】:

    标签: ios firebase firebase-realtime-database swift4


    【解决方案1】:

    如果每个子节点都有一个 property 名称,您将使用 queryOrdered(byChild: "name")。但在您的情况下,您正在查询一个名为 name 的节点,并且您想要过滤子节点的 value。为此,请使用queryOrderedByValue

    let query = DBref?.child("name").queryOrderedByValue).queryEqual(toValue: "manni")
    

    这首先对name 的子节点进行排序,然后只返回匹配manni 的子节点。

    【讨论】:

    • 谢谢大家的回答。现在它正在运行。但我不能进一步使用火力基地。不可能像在 SQL 中那样选择增量(其中字段如“%%”)。这是非常令人失望的。否则它是一个很好的解决方案,但 NOSQL-DB 应该这样做。我要向谷歌投诉 ;))
    【解决方案2】:

    你需要改变这个:

    let query = DBref?.queryOrdered(byChild: "name").queryEqual(toValue: "manni")
    

    到这里:

    let query = DBref?.queryOrdered(byChild: "-L5o1LyZRP3J_D-OiguB").queryEqual(toValue: "manni")
    

    因为child: name 不等于manniname 里面的 child 等于 manni。

    P.S.:我可能抄错了-L5o1LyZRP3J_D-OiguB

    子名称是父节点(不等于任何东西),所有具有随机ID的节点都是子name的子节点。

    如果要检索多个值,则需要具有相同的键(key:value),然后可以执行以下操作:

    你可以像这样改变你的数据库:

    myapp2go-app
         randomid
              name:manni
         randomid
              name:manni
         randomid
              name:ulli
         randomid
              name:Test
         randomid
              name:alf
         randomid
              name:ulf
    

    然后在你的查询中,保持这样:

     let query = DBref?.queryOrdered(byChild: "name").queryEqual(toValue: "manni")
    

    【讨论】:

    • 如果我这样做:byChild: "-L5o1LyZRP3J_D-OiguB" 就像你建议的那样,我只会得到一个名字。但结果应该是 2 个名字!?但它甚至没有按照你的方式工作。
    • no 结果是正确的,你得到一个名字是因为另一个有不同的 randomid,请检查你上面的数据库。每个manni 有一个不同的密钥,他们需要有相同的密钥。
    • 也检查一下这个github.com/firebase/quickstart-ios/issues/142可能对你有帮助
    • 感谢您的提示。这是我保存数据的方法: DBref?.child("name").childByAutoId().setValue(TFInput.text!) 我怎样才能摆脱这个 randomid ?
    • childByAutoId() 正在生成随机 ID,而 setValue(TFInput.text!) 是类似 manni, ulf 的值。所以我想这样做,DBref?.childByAutoId().child("name").setValue(TFInput.text!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多