Firestore - 添加带有数组的对象

IT小君   2023-05-12T00:43:56

整天在这里玩这个东西,让我有点自闭,我有两个类:Department和Articals:

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

还有:

export class Artical {

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

constructor() {
}
}

你可以看到departments包含一个“Articals”数组,因此我正在构建一个新的Department,其中包含新的articals(和它们的属性),并尝试将其添加到fireStore中:

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

但是出现了错误: “Function DocumentReference.set() called with invalid data. Unsupported field value: a custom Artical object”

尝试仅将articals数组添加到部门路径中:

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

并使用“update”而不是“set”,但是没有帮助,正确的方法是什么,可以添加这种对象到firestore中?

点击广告,支持我们为你提供更好的服务
评论(1)
IT小君

Firestore只接受嵌入在文档中的JavaScript对象,如果它是一个“纯”对象,这意味着在TypeScript中开发时不能使用自定义对象。所以在将它们推送到文章数组之前,您必须映射您的对象。

首先更改您的Department类:

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

第二步映射您的“Artical”数组:

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

然后,您可以将映射值分配给“this.myDepartment.articals”

this.myDepartment.articals = map;

之后,您可以执行:

this.departmetsCollection.doc(departmentId).set(Object.assign({}, 
myDepartment))
2023-05-12T00:44:16   回复