如何在不覆盖孩子的情况下更新?



考虑Firebase实时数据库中的现有数据

db.ref('path/to/child').once('value')
{
"data":{
"this":"value",
"that":"value"
}
}

将此集合操作视为原始数据

db.ref('path/to/child').update({"data":{"this":"newValue"}})
{
"data":{
"this":"newValue",
}
}

我们如何执行更新以保留未更改的数据

db.ref('path/to/child').foo({"data":{"this":"newValue"}})
{
"data":{
"this":"newValue",
"that":"value"
}
}

现在,您的代码正在告诉 Firebase 更新整个data子项path/to/child。 相反,您应该引用要更新的最终子节点的最深层路径:

db.ref('path/to/child/data').update({"this":"newValue"})

请注意,我已将data放在引用中,而不是要更新的对象中。

我遇到了同样的问题,但上面的示例不起作用。我根据文档得出了同样的结论,但这些文档也不起作用。它仍然覆盖了"数据"中的内容。

数据后用斜杠进行测试(在我的例子中是对象键(对我有用。也许我仍然误解了它是如何工作的,但我想我会添加这个以防其他人遇到同样的问题。如果我错了,请解释一下。

这确实完全符合我的预期。

db.rev('path/to/child/data/').update({"this": "newValue")
// almost exact path I use on some random test data
// path -> root/userid/list/listid/
db.rev('user/2FsJBrxZHQFff61QkMIuTV49KBUcQ2/list/MOwh_FwDmlKbxsfUmZS/').update({"name": "newValue")

最新更新