firebase - Flutter/Firebase:我想更新现有值,但正在创建新值
问题描述
我正在做一个颤振项目,这是我的代码:
String vl = store.reference().child("Volunteers/Aadithya").push().key;
vlRef = FirebaseDatabase.instance.reference().child("Volunteers/Aadithya");
vlRef.child(vl).update({
"Contributions": int.parse(count)+1,
}).then((_) {
}).catchError((onError) {
Scaffold.of(context)
.showSnackBar(SnackBar(content: Text(onError)));
});
Contributions
里面是一个数据记录Aadithya
。我需要单独更新它的值。但是发生的是,内部正在创建一个新的子记录Aadithya
,contributions
它的数据类型是
请帮忙:
解决方案
如果要更新此用户的 displayName:
var db = firebase.database();
db.ref("-Users/-KUanJA9egwmPsJCxXpv/displayName").set("New trainer");
或者,您也可以通过以下方式获得相同的结果:
db.ref("-Users/-KUanJA9egwmPsJCxXpv").update({ displayName: "New trainer" });
但是您很可能不知道用户的 ID,在这种情况下,您需要先查找:
var query db.ref("-Users").orderByChild("uid").equalTo("jRXMsNZHR2exqifnR2rXcceEMxF2");
query.once("child_added", function(snapshot) {
snapshot.ref.update({ displayName: "New trainer" })
});
不过,关于您的数据结构的最后一点评论:您似乎在存储用户配置文件,但您将它们存储在推送 ID 下。对于这种类型的结构,我们通常建议您将每个用户存储在他们的 UID 下:
-Users
jRXMsNZHR2exqifnR2rXcceEMxF2
displayName:"Test Trainer"
email:"test@gmail.com"
使用这样的结构,您消除了将同一用户存储两次的任何机会。此外,您现在无需查询即可更新用户的显示名称:
var currentUser = firebase.auth().currentUser;
db.ref("-Users/"+currentUser.uid).update({ displayName: "New trainer" });
推荐阅读
- asp.net - 如何实现分页 HOT Chocolate 的缓存?
- python - 如何将每个 .csv 文件分配给单个子图?
- templates - 使用模板变量
- mysql - 在编写查询总数和唯一计数时需要帮助
- csv - 将 .csv 导入 PGADMIN4 - 退出代码 1 失败
- python - 使用一个表单中的值作为重定向模板(Django)中另一个表单的值
- javascript - 剑道下拉过滤器无法正常工作
- java - 大型列表流上的 Java 8 过滤器是否比 for 循环更耗时?
- android - Camerax VideoCapture 最大持续时间限制
- java - 当窗口缩放未设置为 100% 时,与 Jframes 的 setMinimumSize 和手动拖动不一致的行为