如何删除Firebase中的特定节点?

时间:2019-06-15 13:46:23

标签: firebase firebase-realtime-database flutter dart

我连接了firebase并在其中保存了数据。但是我无法删除Firebase中的特定条目。

我尝试通过下面编写的方法删除。但这不起作用。

final FirebaseDatabase _database = FirebaseDatabase.instance;
delData(String phoneNumber) {_database.reference()
.child('phoneNumber')
.remove()
.then((_) {
    print("Delete $phoneNumber successful");
    setState(() {
      // 
    });
  });
}

更新

Frank van Puffelen建议我使用的方法无法正常工作,它删除了具有phoneNumber字段的所有条目,并且我需要删除具有授权用户的电话号码的条目。此外,当在phoneNumber字段中添加新笔记时,该方法会进行监听并自动将其删除

removeNode() {
    FirebaseDatabase.instance.reference()
        .child('customers')
        .orderByChild('phoneNumber')
        .equalTo(phoneNumber)
        .onChildAdded.listen((Event event) {
      FirebaseDatabase.instance.reference()
          .child('customers')
          .child(event.snapshot.key)
          .remove();
    }, onError: (Object o) {
      final DatabaseError error = o;
      print('Error: ${error.code} ${error.message}');
    });
  }````
// This is how is i add data to DB     
   ````void handleSubmit() {
      final FormState form = formKey.currentState;
      print(userPhone);
      if (form.validate()) {
        form.save();
        form.reset();
        itemRef.push().set(item.toJson());}````

this is what i want to delete

也许我应该使用Firestore?

1 个答案:

答案 0 :(得分:1)

要删除一个节点,您需要知道该节点的完整路径。如果您不知道完整的路径,则可以使用查询来确定它。

因此,在您的情况下,如果您知道要删除的节点的电话号码,则可以查询具有该电话号码的所有节点(因为可能有多个),然后将其删除。

此代码类似于:

FirebaseDatabase.instance.reference()
  .child('customers')
  .orderByChild('phoneNumber')
  .equalTo('+79644054946')
  .onChildAdded.listen((Event event) {
    FirebaseDatabase.instance.reference()
      .child('customers')        
      .child(event.snapshot.key)
      .remove();
  }, onError: (Object o) {
    final DatabaseError error = o;
    print('Error: ${error.code} ${error.message}');
  });