我正在寻找同步节点,例如/ a / b / c with node / data / c
节点/ a / b / c上有数据 - 所以我只想获取/ data / c的快照并将数据放入/ a / b / c而不删除现有值。
会采用以下方式:
Ref.update({
snapshotdata.val()
}).key;
这会有用吗?我不确定firebase如何解析快照,如果它需要整个事情并覆盖它,或者需要单个值并添加。
提前感谢您的清晰。
最诚挚的问候, 基兰
答案 0 :(得分:1)
这取决于。快照值只是JSON对象(或原语,具体取决于节点)。 update()
将替换更新中的键指定的任何节点,但不会替换任何不是。如果/a/b/c
看起来像:
{
name: 'old name',
data: {
gonnabe: 'gone'
},
created: 12345679
}
和data/c
看起来像:
{
name: 'new name',
data: {
nested: true
},
updated: 12345679
}
执行db.ref('a/b/c').update(dataSnapshot.val())
会导致:
{
name: 'new name',
data: {
nested: true
},
created: 12345679,
updated: 12345679
}
请注意,data
中的嵌套字段已被更新删除,但非嵌套字段created
未被删除。
如果要进行深度更新,则需要为要更新的每个深层节点构建一个带斜杠分隔字段的更新。因此,除了上述内容之外,您可能还有:
{
"name": "new name",
"data/nested": true,
"updated" 12345679
}
这对嵌套数据是非破坏性的,只更新直接引用的值,导致:
{
name: 'new name',
data: {
gonnabe: 'gone',
nested: true
},
created: 12345679,
updated: 12345679
}
希望有所帮助!