我正在尝试在Firebase的数组中推送新项目
我尝试过这样做,但是它只是替换了Firebase中数组的第一项
usersUid: [{ usersUid: player.userUid }]
提供者:
addPlayer(chatRoomUid: string, player: Player): Promise<any> {
return this._getDoc(chatRoomUid).set({
players: [
{
userUid: player.userUid,
userName: player.userName,
characterUid: player.characterUid,
characterName: player.characterName
}
],
usersUid: [{ usersUid: player.userUid }]
}, { merge: true });
}
private _getDoc(chatRoomUid: string): AngularFirestoreDocument {
return this.afs.doc(`chat_rooms/${chatRoomUid}`);
}
型号:
usersUid: string[];
预期输出:
我得到了:
答案 0 :(得分:1)
使用set
时,将覆盖现有数据(在您的情况下为聊天室)。
如果要向userUid添加新ID,首先需要获取当前ID列表,
然后更改此行:
usersUid: [{ usersUid: player.userUid }]
收件人:
usersUid: listOfIds
list OfIds应该是一个数组,而不是对象。 (例如[1,2,3,4,5])
答案 1 :(得分:1)
找到了答案。
usersUid: firestore.FieldValue.arrayUnion(player.userUid)
有效
请参阅:https://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array
答案 2 :(得分:0)
在chat_rooms数组中使用.push
而不是.set
https://github.com/angular/angularfire2/blob/master/docs/rtdb/lists.md#adding-new-items
const itemsRef = db.list('items');
itemsRef.push({ name: newName });