如何删除firebase中的特定节点?
我连接了firebase并在其中保存了数据。但我无法删除firebase中的特定条目 我尝试通过我在下面写的方法删除。但它不起作用如何删除firebase中的特定节点?,firebase,firebase-realtime-database,flutter,dart,Firebase,Firebase Realtime Database,Flutter,Dart,我连接了firebase并在其中保存了数据。但我无法删除firebase中的特定条目 我尝试通过我在下面写的方法删除。但它不起作用 final FirebaseDatabase _database = FirebaseDatabase.instance; delData(String phoneNumber) {_database.reference() .child('phoneNumber') .remove() .then((_) { print("Delete $phoneNum
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?为了删除节点,您需要知道该节点的完整路径。如果您不知道完整的路径,可以使用查询来确定它 因此,在您的情况下,如果您知道要删除的节点的电话号码,您可以查询具有该电话号码的所有节点(因为可能有多个),然后删除它们 这方面的代码如下所示:
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}');
});
更新(20200221):您还可以使用
once()
侦听器并通过以下方式在其子节点上循环:
FirebaseDatabase.instance.reference()
.child('customers')
.orderByChild('phoneNumber')
.equalTo('+79644054946')
.once()
.then((DataSnapshot snapshot) {
Map<dynamic, dynamic> children = snapshot.value;
children.forEach((key, value) {
FirebaseDatabase.instance.reference()
.child('customers')
.child(key)
.remove();
})
});
FirebaseDatabase.instance.reference()
.child(“客户”)
.orderByChild(“电话号码”)
.equalTo(“+79644054946”)
.一次
.then((数据快照快照){
Map children=snapshot.value;
children.forEach((键,值){
FirebaseDatabase.instance.reference()
.child(“客户”)
.儿童(钥匙)
.remove();
})
});
要删除节点,您需要知道该节点的完整路径。如果您不知道完整的路径,可以使用查询来确定它
因此,在您的情况下,如果您知道要删除的节点的电话号码,您可以查询具有该电话号码的所有节点(因为可能有多个),然后删除它们
这方面的代码如下所示:
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}');
});
更新(20200221):您还可以使用
once()
侦听器并通过以下方式在其子节点上循环:
FirebaseDatabase.instance.reference()
.child('customers')
.orderByChild('phoneNumber')
.equalTo('+79644054946')
.once()
.then((DataSnapshot snapshot) {
Map<dynamic, dynamic> children = snapshot.value;
children.forEach((key, value) {
FirebaseDatabase.instance.reference()
.child('customers')
.child(key)
.remove();
})
});
FirebaseDatabase.instance.reference()
.child(“客户”)
.orderByChild(“电话号码”)
.equalTo(“+79644054946”)
.一次
.then((数据快照快照){
Map children=snapshot.value;
children.forEach((键,值){
FirebaseDatabase.instance.reference()
.child(“客户”)
.儿童(钥匙)
.remove();
})
});
谢谢,我测试了此代码,不幸的是,它只删除了firebase中手机的线路,您需要删除用户授权号码下的整个记录。此外,您的代码会删除存储电话号码的变量的内容。我在回答中使用了硬编码的电话号码,这样就不会依赖于我们看不到其值的变量。我的答案中的代码删除了与电话号码匹配的/customers
下的直接子节点。如果它为您做了其他事情,请使用复制该问题的最小代码更新您的问题。看起来我想做的事情不会在firebaseDatabase中实现,我想使用firestore,请不要告诉我如何将我的代码改编为firestore?在firestore中删除数据与在实时数据库中删除数据没有明显区别。此外,您还需要运行查询以确定要删除的文档的完整路径。我很确定我共享的代码是您需要做的,因此,如果您在实现它时遇到问题,请更新您的问题,以包括您根据我的答案尝试的内容。您的代码似乎工作正常,但它会将应用程序中的电话号码删除到。请告诉我如何在删除之前复制它(对象,而不是指向它的链接),或者如何从currentUser FirebaseUser获取电话号码,我尝试了不同的方法,但没有成功谢谢,我测试了此代码,不幸的是,它只删除了firebase中与电话相连的线路,您需要删除整个记录,其中包含授权用户的编号。此外,您的代码会删除存储电话号码的变量的内容。我在回答中使用了硬编码的电话号码,这样就不会依赖于我们看不到其值的变量。我的答案中的代码删除了与电话号码匹配的/customers
下的直接子节点。如果它为您做了其他事情,请使用复制该问题的最小代码更新您的问题。看起来我想做的事情不会在firebaseDatabase中实现,我想使用firestore,请不要告诉我如何将我的代码改编为firestore?在firestore中删除数据与在实时数据库中删除数据没有明显区别。此外,您还需要运行查询以确定要删除的文档的完整路径。我很确定我共享的代码是您需要做的,因此,如果您在实现它时遇到问题,请更新您的问题,以包括您根据我的答案尝试的内容。您的代码似乎工作正常,但它会将应用程序中的电话号码删除到。请告诉我如何在删除之前复制它(对象,而不是指向它的链接),或者如何从currentUser FirebaseUser获取电话号码,我尝试了不同的方法,但没有成功