Вопрос:

Firestore - добавление объекта с массивом

angularjs firebase angularfire google-cloud-firestore

1487 просмотра

1 ответ

349 Репутация автора

убиваю себя этой штукой здесь весь день, у меня два класса факультета и художественные произведения:

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

а также:

export class Artical {

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

constructor() {
}
}

Например, вы можете увидеть, что отделы содержат массив «Articals», поэтому я создаю новый отдел с новыми артикулами (и их свойствами) и пытаюсь добавить его в fireStore с помощью:

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

но получая сообщение об ошибке: «Функция DocumentReference.set () вызвана с недопустимыми данными. Неподдерживаемое значение поля: пользовательский объект Artical»

Ps постарался добавить только массив articals к пути отдела, как

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

и с «обновлением» вместо «установки», но также без помощи: S, как правильно добавить такой тип объекта в firestore?

Автор: pb4now Источник Размещён: 08.11.2017 10:29

Ответы (1)


7 плюса

1353 Репутация автора

Решение

Firestore принимает JavaScript-объект, встроенный в документ, только если это «чистый» объект, это означает, что вы не можете использовать пользовательские объекты при разработке в TypeScript. Таким образом, вам нужно отобразить ваши объекты, прежде чем помещать их в массив articals.

Сначала измените свой класс отдела:

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))
Автор: Mateus Forgiarini da Silva Размещён: 11.12.2017 01:23
Вопросы из категории :
32x32