2017-12-30 17 views
0

私は更新したいノードを取得するために.queryEqualを使用してFirebaseを照会する機能を持っていますが、値をfalseに設定する方法はわかりません。ここで私が持っている機能は次のとおりです。単一の子を返して値を更新するためにクエリを実行します

func addrShipDefault() { 
    let ref = Router.addrShip.reference().child(self.userId) 
    let query = ref.queryOrdered(byChild: "isDefault").queryEqual(toValue: true) 
    query.setValue(false, "isDefault") 
} 

誰かが私が探していたノードのためのFirebaseを照会し、その値を更新する方法を教えすることはできますか?

私はref.updateChildValuesを使って他のアップデートを行っていますが、私は正確なパスを知っています。今回は、isDefaultがtrueに設定されているノードを検索して変更する必要があります。

希望はこれが理にかなっています!

は****ヘルプ

のためのDB構造今では、上記の例を使用して

{ 
    "addr_01" : { 
    "address1" : "63 Park Ave", 
    "address2" : "Unit #2", 
    "city" : "Greenland", 
    "firstName" : "John", 
    "id" : "addr_01", 
    "isDefault" : true, 
    "lastName" : "Smith", 
    "state" : "MA", 
    "zipcode" : "01890" 
    }, 
    "addr_02" : { 
    "address1" : "101 Lafayette Rd", 
    "address2" : "", 
    "city" : "Rye", 
    "firstName" : "Say It In 3D", 
    "id" : "addr_02", 
    "isDefault" : false, 
    "lastName" : "", 
    "state" : "NH", 
    "zipcode" : "03870" 
    } 
} 
+0

にも存在することに注意して、あなたのfirebaseデシベルの構造を示すことはできますか? – 3stud1ant3

+0

私はそのノードの構造を示すポストへのアップデートを追加しました。早速のお返事ありがとうございます!! – LilMoke

+0

あなたは 'setValue'が辞書を受け入れると思うので、' query.setValue(false、 "isDefault") 'の代わりに' query.setValue(["isDefault":false) – 3stud1ant3

答えて

0
公式ドキュメントから

here

you can update a child without rewriting the entire object. If you want to allow users to update their profiles you could update the username as follows:

self.ref.child("users/(user.uid)/username").setValue(username) 

を表示するためにUPDATEをありがとうあなたのケース:

は、我々はこのような何かを行うことができます。(私はそれを試してみましたhaventはしかし、私はあなたのアイデアを得ることができると思います)、次のように公式ドキュメントからhere

機能署名setValue方法のためのものであることを

let ref = Router.addrShip.reference().child(self.userId) 
let query = ref.queryOrdered(byChild: "isDefault").queryEqual(toValue: true) 

//query.child("isDefault").setValue(false) 

//Updated Code 

query.observeSingleEvent(of: .childAdded) { (snapshot) in 
      let newRef = snapshot.ref.child("isDefault") 
      newRef.setValue(false, withCompletionBlock: { (err, ref) in 
        print("SetValue") 
      }) 
} 

注:

func setValue(_ value: Any?)  

上記のように、任意の型の値を任意で受け入れます。つまり、有効なjsonに任意の値を渡すことができます。

はまた、方法は完了ブロック

func setValue(_ value: Any?, withCompletionBlock block: @escaping (Error?, DatabaseReference) -> Void) 
+0

Hmmm、これを試しましたが、このコンパイラエラーが発生します: 'DatabaseQuery'型の値に 'child'というメンバーはありません – LilMoke

+0

@LilMokeはい、そうです答えに変更を加えました。見て、あなたのフィードバックをお寄せください、ありがとう – 3stud1ant3

関連する問題