我有以下Typescript模型:
export class Parent{
id: string;
children: Child[];
}
export class Child {
id: string;
}
我在Firestore中添加这样的父母:
admin.firestore().collection('parent').doc(p.id).set(p);
结果如下:
Parents: [PARENT_ID] { id: PARENT_ID, children: [[0]: { CHILD1 }, [1]: {CHILD2 }}
我想要的是我的subCollection子代将其id作为唯一键,而不是像这样的集合索引:
Parents: [PARENT_ID] { id: PARENT_ID, children: [[CHILD_ID_1]: { CHILD1 }, [CHILD_ID_2]: {CHILD2 }}
我可以实现这一点,但可以从Parent类中删除children属性,然后执行以下操作:
admin.firestore().collection('parent').doc(p.id).set(p);
children.forEach(c => admin.firestore().collection('programs').doc(p.id).collection(c.id).set(c);
但是有什么办法可以更改我的打字稿模型,以便我可以存储一次父项并将child.id作为键而不是索引?
答案 0 :(得分:0)
您的children
属性如下所示:
children: [[0]: { CHILD1 }, [1]: {CHILD2 }}
因为它是数组类型。因此,您在文档中拥有一个数组类型的属性,该属性包含Child
个对象,并且0
和1
是数组的索引。如果要更改此行为,请将属性的类型从array
更改为Map
。在这种情况下,您将有一个Child
对象的映射,并且可以根据需要设置ID。在这种情况下,您的数据库结构将如下所示:
Firestore-root
|
--- parent (collection)
|
--- docId (document)
|
--- id: "docId"
|
--- children
|
--- yourCustomId: CHILD1
|
--- yourCustomId: CHILD2