我连接了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());}````
也许我应该使用Firestore?
答案 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}');
});