Javascript ref.update()删除省略的键-与.set()类似?
我正在尝试使用Firebase realtime database.update()根据更新数据节点。我使用.update()有选择地只更新该位置的引用键,而不是替换该位置的所有键 我的问题是,我从更新对象中省略了键“createdAt”,因为我不希望在初始创建后更新“createdAt”-但是在使用.update()时,“createdAt”键会被删除(゚ペ) 数据库结构Javascript ref.update()删除省略的键-与.set()类似?,javascript,firebase-realtime-database,Javascript,Firebase Realtime Database,我正在尝试使用Firebase realtime database.update()根据更新数据节点。我使用.update()有选择地只更新该位置的引用键,而不是替换该位置的所有键 我的问题是,我从更新对象中省略了键“createdAt”,因为我不希望在初始创建后更新“createdAt”-但是在使用.update()时,“createdAt”键会被删除(゚ペ) 数据库结构 { "data": { "notifyByEmail": false, "notifyByPush"
{
"data": {
"notifyByEmail": false,
"notifyByPush": false,
"notifyBySms": false
},
"access/members": {
"1234567890": true,
"0987654321": true
}
}
console.log('api', `${myPath}/${id}`, dbUpdateObj)
database.ref(`${myPath}/${id}`).update(dbUpdateObj).then(() => {
resolve({id, reduxStoreObj})
})
对象发送到更新()
代码
{
"data": {
"notifyByEmail": false,
"notifyByPush": false,
"notifyBySms": false
},
"access/members": {
"1234567890": true,
"0987654321": true
}
}
console.log('api', `${myPath}/${id}`, dbUpdateObj)
database.ref(`${myPath}/${id}`).update(dbUpdateObj).then(() => {
resolve({id, reduxStoreObj})
})
日志记录
api categories/-LqXvFkeF_QfA5oHquYp [+] Object { data: {…}, "access/members": {…} }
结果
为什么删除了“createdAt”?我想.update()应该只更新定义的键,而不接触省略的键
我错过了什么
/K您可以将.set()
与{merge:true}
选项一起使用,以避免(未更改的)数据被新数据替换
请参阅:调用
update
就像对传入的每个属性分别调用set
。因此在您的示例中,数据和访问/成员
被完全替换,但数据库.ref(`${myPath}/${id}')
下的所有其他属性保持不变
如果要更新更深层次的属性,请在更新映射中包含它们的整个路径。因此,要维护data/createdAt
,请指定要更新的notify…
属性的整个路径:
{
"data/notifyByEmail": false,
"data/notifyByPush": false,
"data/notifyBySms": false,
"access/members": {
"1234567890": true,
"0987654321": true
}
}
我发现在这样的多路径更新语句中,最常见的是有一个完整路径的平面图。因此,为了维护access/members
的现有成员,上述内容将变为:
{
"data/notifyByEmail": false,
"data/notifyByPush": false,
"data/notifyBySms": false,
"access/members/1234567890": true,
"access/members/0987654321": true
}
您好@tobias!谢谢您的回复。这不是云Firestore独有的吗?我使用的是实时数据库。抱歉,我不明白,合并选项仅适用于Firestore。如果您刚刚开始使用,我建议您使用Firestore而不是Firebase RTDB。谢谢!我已经评估了这两个选项,并且已经有了一个大型项目库非常感谢弗兰克!一如既往-平面图是解决方案的一部分。;)