Firestore - 使用数组

时间:2017-11-08 22:29:40

标签: angularjs firebase angularfire google-cloud-firestore

在这里整天用这个东西杀了我自己,我有两个部门和Articals:

export class Department {
articals?: Artical[]=[];
moms?: number;
id?: string;
constructor() {
}
}

export class Artical {

moms?: number;
price: number;
name?: string;

constructor() {
}
}

喜欢你可以看到部门包含一系列的“Articals' 所以我正在使用新的articals(及其属性)构建新部门并尝试将其添加到fireStore:

this.departmetsCollection.doc(departmentId).set(Object.assign({}, 
myDepartment));

但是收到错误: "函数DocumentReference.set()使用无效数据调用。不支持的字段值:自定义的Artical对象"

尝试仅将部分艺术品添加到部门的路径

doc(departmentId).set({'articals':myArticals});

并使用'更新'而不是设置'但也没有任何帮助:S 将这种对象添加到firestore是正确的吗?

1 个答案:

答案 0 :(得分:7)

Firestore仅接受嵌入在文档中的JavaScript对象(如果它是“纯”对象),这意味着您在使用TypeScript进行开发时无法使用自定义对象。因此,在将对象推送到articals数组之前,您必须映射它们。

首先更改您的部门课程:

export class Department {
articals?: Array<any>=[];
moms?: number;
id?: string;
constructor() {
}
}

第二个映射你的数组&#34; Artical&#34;:

var map = arrayOfArtical.map((obj)=> {return Object.assign({}, obj)});

然后您可以将地图值归因于&#39; this.myDepartment.articals&#39;

this.myDepartment.articals  = map;

之后你可以执行:

this.departmetsCollection.doc(departmentId).set(Object.assign({}, 
myDepartment))