2017-10-14 78 views
0

我试图更新Firebase中的数组。 我知道我可以添加新的数组是这样的:Firebase更新阵列值或创建新阵列

let array1 : [String] = ["w9pRe7sTj5aUPf3og4vUZ3kVpXs2"] 
firebaseRef.child(playerID).child("friends").setValue(array1) 

但如果用户已经拥有的“朋友”,其覆盖旧数据与新的数组。

如何创建新的数组,只有当用户没有“朋友”阵列 如果数组存在只是“追加”新值。

感谢

+0

你能告诉你的火力DB的结构? – 3stud1ant3

+0

@ 3stud1ant3增加了屏幕截图 – Felix

+0

您是否尝试过使用'updateChildValues'? – 3stud1ant3

回答

0

有,你可以在这里采取两种方法。

选项1: 转换当前数组可变数组,对象添加到它并将其值设置再次

NSMutableArray * mutableArray = [NSMutableArray arrayWithArray:firebaseArray]; 
[mutableArray addObject:@"random_id"]; 
firebaseRef.child(playerID).child("friends").setValue([mutableArray copy]); 

注:这可以称之为观察者的childAdded:方法预先存在的ID为好。

选项2:将您的数组转换为设置。这是你的情况的首选方法,因为你不想在你的“朋友”列表中找到多个类似的字符串。也很容易维护。

firebaseRef.child(playerID).child("friends").child("random_id").setValue(YES); 
+0

谢谢,选项1仍然覆盖数据 – Felix

0

而是使用的是这样的:

以这种方式使用的setValue在指定位置覆盖数据,包括所有的子节点。

self.ref.child("users").child(user.uid).setValue(["username": username]) 

你可以尝试这样的:

...你仍然可以更新一个孩子,不重写整个对象。如果你想允许用户更新他们的个人资料如下,你可以更新的用户名:

self.ref.child("users/(user.uid)/username").setValue(username) 

我希望这可以帮助你。

documentation

+0

谢谢,但'ref.child(“users /(user.uid)/ username” )。setValue(username)' 创建属性,称为'用户名'和值(用户名值) – Felix

+0

@Felix您是否尝试过使用您的信息?例如:'ref.child(“players/w9pRe7sTj5aUPf3og4vUZ3kVpXs2/friends”)。setValue(array1)' –

0

我不认为有一种方法来“追加”新值入阵不存在越权用新阵。

请检查下面的例子:

firebaseRef.child(playerID).child("friends").observeSingleEvent(of: .value) { (snapshot) in 
    // check if friends array exist 
    if let friendsArr = snapshot.value as? NSArray{ 
     // add new friend ID to the array 
     let newArr = friendsArr.adding("YOUR NEW FRIEND ID") 
     // update in firebase DB 
     snapshot.ref.setValue(newArr) 
    }else{ // No array exist, save new array 
     firebaseRef.child(playerID).child("friends").setValue(array1) 
    } 
}