我试图将新数据插入Firebase实时数据库的表中,但是setValue()
和updateChildren()
都被先前的表和值覆盖。
我知道setValue()
正在替换先前的数据,但就我而言,updateChildren()
也在覆盖先前的数据。
在Firebase console
中,这两个方法似乎都是delete
的上一个表并创建了一个新表。
Firebase console
在执行updateChildren()
时
我的代码错误吗?
我的数据库结构为:
-accounts
- $userId
- missions
- $productId
- ...
,代码为:
val missionsReference = FirebaseDatabase.getInstance().getReference("accounts").child(userId).child("missions")
val mission = Mission(product.id, product.imageUrl, product.title, product.logoUrl, remain.timeInMillis, "", -1, snsAddress)
missionsReference.child(product.id).setValue(mission)
val missionValue: Map<String, Any> = mission.toMap()
val missionUpdate: HashMap<String, Any> = HashMap()
missionUpdate[product.id] = missionValue
missionsReference.updateChildren(missionUpdate)
/* I also tried following methods, but it overwrites too.
FirebaseDatabase.getInstance().getReference("accounts/$userId/missions/${product.id}").setValue(mission)
missionsReference.push().setValue(mission)
*/
答案 0 :(得分:2)
查看您的数据库结构并假设您必须实现以下目标:
Firebase-root
|
--- accounts
|
--- userId
|
--- missions
|
--- 0
| |
| --- //Mission details
|
--- 4
|
--- //Mission details
请使用以下代码行:
val missionsReference = FirebaseDatabase.getInstance().reference.child("accounts").child(userId).child("missions")
val mission = Mission(product.id, product.imageUrl, product.title, product.logoUrl, remain.timeInMillis, "", -1, snsAddress)
missionsReference.child("4").setValue(mission)
但是,我建议您使用child()
函数生成的随机密钥,而不是将硬编码值传递给push()
函数:
missionsReference.push().setValue(mission)
现在,您的数据库结构将如下所示:
Firebase-root
|
--- accounts
|
--- userId
|
--- missions
|
--- randomId
| |
| --- //Mission details
|
--- randomId
|
--- //Mission details
在这种情况下,不需要使用updateChildren()
函数。此函数用于更新Mission
对象下的属性,例如,如果要更改`imageUrl``属性。
答案 1 :(得分:0)
好的,我放弃了帐户表中的创建任务数组。我尝试过,而且行得通。
plm(Y~X, data=home, model = "within")
lm(Y~X+my_name, data=home)
我仍然不知道为什么该方法可行并且以前的方法无效。在我看来,这似乎是数据库级别(或深度?)的问题