好的,这就是我的Fireabse数据库的样子:
现在,我需要为每个用户更新“关于”节点。没有用户节点,这就是我要做的:
val mAllUserDatabase : DatabaseReference = FirebaseDatabase.getInstance().reference.child("Users"))
val childUpdates = HashMap<String, Any>()
childUpdates["/about"] = "new value"
mAllUserDatabase.updateChildren(childUpdates)
问题是,我需要定义用户的节点(不是吗?)。但是由于用户节点都具有不同的名称,因此我需要类似“任何节点”或“所有节点”的名称。
childUpdates["/any/about"] = "new value"
快照的或getChildren()
。
解决此问题的最佳方法是什么?我是否必须使用addListenerForSingleValueEvent
来读取所有节点的名称,然后将mAllUserDatabase
上的名称与.updateChildren(childUpdates)
一起使用?那不是最好的方法。
答案 0 :(得分:1)
要将值写入Firebase实时数据库中的节点,您需要知道该节点的确切路径。 Firebase没有SQL更新查询的概念。
因此,在您的情况下,您需要首先读取要更新的节点,然后遍历它们,然后一个一个地或使用一条大型的多位置更新语句来更新它们。
答案 1 :(得分:1)
要在所有用户对象中更新您的about
属性,请使用以下代码行:
val rootRef = FirebaseDatabase.getInstance().reference
val usersRef = rootRef.child("Users")
val valueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (ds in dataSnapshot.children) {
val childUpdates = HashMap<String, Any>()
childUpdates["about"] = "yourNewAboutValue"
ds.ref.updateChildren(childUpdates)
}
}
override fun onCancelled(databaseError: DatabaseError) {
Log.d(TAG, databaseError.getMessage()) //Don't ignore errors!
}
}
usersRef.addListenerForSingleValueEvent(valueEventListener)