削除したいノードのキーにアクセスできないと思います。そうですか?何故なの? FIRDatabaseQueryオブジェクトで "observe()"関数を使用する場合、返される各オブジェクトにはキーと値が必要です。
Firebase official guidesに記載されているように、キーを持つとノードを削除するのは簡単です。リンクされたガイドから
、
削除データ
データを削除する最も簡単な方法は、そのデータの場所を参照 上たremoveValueを呼び出すことです。
また、setValueやupdateChildValuesなどの別の書き込み オペレーションの値としてnilを指定することで削除することもできます。この 技法をupdateChildValuesと共に使用すると、 単一API呼び出しで複数の子を削除できます。
だから、あなたは試みることができる:
FirebaseDatabase.Database.database().reference(withPath: "Forum").child(key).removeValue()
または
FirebaseDatabase.Database.database().reference(withPath: "Forum").child(key).setValue(nil)
あなたはどのような方法でキーを取得できない場合は、の子を「繰り返し処理」について言ったことノードはクエリを使用して実行できます。ここでは、Jonahelbazにより、すべてのフォーラムの投稿をしたいと仮定、いくつかのサンプルコードです:
ここ
return FirebaseDatabase.Database.database().reference(withPath: "Forum").queryOrdered(byChild: "username").queryEqual(toValue: "Jonahelbaz").observe(.value, with: { (snapshot) in
if let forumPosts = snapshot.value as? [String: [String: AnyObject]] {
for (key, _) in forumPosts {
FirebaseDatabase.Database.database().reference(withPath: "Forum").child(key).removeValue()
}
}
})
あなたは、あなたが「ユーザ名」Johanelbazに等しいフォーラムへの投稿のためにだけ頼む参照「ユーザ名」として使用してソートされたクエリを作成します。返されたスナップショットは配列なので、配列を繰り返し処理し、ノードを削除するためにキーを使用します。
この削除方法は、同じユーザー名の投稿が複数ある可能性があり、それらをすべて削除する可能性があるため、あまり良くありません。理想的なケースは、削除するフォーラム投稿の正確なキーを取得することです。
すごくうまくいった!私はそれを削除するためにEpoch時間を使うつもりだと思う。なぜなら、同時に(理論的に)同時に複数の投稿を提出することはないからだ。しかし、唯一の問題を抱えている。それは、ユーザー名がJonahelbaz –
のものを除いて、すべての投稿を削除したものです。最後のコメントを修正しました。これを引き起こした私の前のコードに間違いがありました。それは今完璧に動作します!助けてくれてありがとう! –
ああ、私はあなたがエポックタイムを使うことを意味していたことを理解しています...まあ、それは一種のキーです。:-) –