来自 Firebase 注释:
给定像 alanisawesome
这样的单个键路径,updateChildren()
只更新第一个子级别的数据,任何传入超过第一个子级别的数据都被处理作为 setValue()
操作。多路径行为允许在不覆盖数据的情况下使用更长的路径(如 alanisawesome/nickname
)。这就是第一个示例与第二个示例不同的原因。
我正在尝试在我的代码中使用单个函数 createOrUpdateData(object)
。在更新的情况下,它会正确更新第一级子级,但如果我传递了嵌套对象,那么它会删除该嵌套对象的所有其他属性。
代码如下:
function saveUserDetails(email,object){
var hashedEmail = Utilities.getHashCode(email);
var userRef = ref.child(hashedEmail);
return $q(function(resolve,reject){
return userRef.update(object, function(error){
if(error){
reject(error);
}else{
resolve("Updated successfully!");
}
});
});
}
如果我通过了:
{
name: 'Rohan Dalvi',
externalLinks: {
website: 'mywebsite'
}
}
然后它将删除 externalLinks 对象中的其他属性。有没有一种更清洁、更简单的方法来避免这种情况?
简而言之,如何确保只更新嵌套对象而不删除数据。
最佳答案
您可以使用多路径更新。
var userRef = ref.child(hashedEmail);
var updateObject = {
name: 'Rohan Dalvi',
"externalLinks/website": 'mywebsite'
};
userRef.update(updateObject);
通过在对象文字中使用 "externalLinks/website"
语法,它将嵌套路径视为更新而不是嵌套对象的集合。 这可以防止嵌套数据被删除。
关于javascript - 更新嵌套对象 firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33784702/