我有一个angular 8打字稿接口设置,其中包括另一个接口的数组作为变量。如下所示:
export interface User {
name: string;
id: string;
history: Job[]; //this is what is not getting generated
}
,作业界面如下所示:
export interface JobJson {
id: string;
price: number,
notes: string
}
我正在使用Firebase的Cloud Firestore作为数据库,数据库结构如下所示:
用户//集合
|-> user1234 //文档
|->作业//子集合
|-> job1234 //子文档
当我从Firebase查询用户时:
this.firestore.collection<UserJson>('users').doc<UserJson>(id).valueChanges().subscribe((u) => {
// do whatever with u
});
它没有按预期填写历史记录:Jobs []。但是,在我的程序中,我需要将user.history数组设置为firebase中user下的子集合。如何做到这一点?感谢您的帮助!
答案 0 :(得分:0)
据我所知,仅通过一次调用firestore便无法实现这一点。如果您知道哪个集合,则最接近的是两次调用的解决方法;如果您不知道集合的名称,则为最接近的两次。
here也是文档,documentReference的任何方法都无法获取文档快照和集合。
在我的案例中,我将添加两种解决方法,这些代码只是在控制台中打印内容。
不知道子集合名称:,它将获取所有子集合及其元素:
db.collection('users').doc(str[6]).get().then(documentSnapshot => {
console.log(documentSnapshot.data());
});
db.collection(COLLECTION_ID).doc(DOCUMENT_ID).listCollections().then(collections => {
for (let collection of collections) {
console.log(`Found subcollection with id: ${collection.id}`);
collection.get().then((snapshot) => {
snapshot.forEach((doc) => {
console.log(doc.id, '=>', doc.data());
});
})
.catch((err) => {
console.log('Error getting documents', err);
});
}
});
知道要获取的子集合:
db.collection(COLLECTION_ID).doc(DOCUMENT_ID).get().then(documentSnapshot => {
console.log(documentSnapshot.data());
});
db.collection(COLLECTION_ID).doc(DOCUMENT_ID).collection(SUBCOLLECTION_ID).get()
.then((snapshot) => {
snapshot.forEach((doc) => {
console.log(doc.id, '=>', doc.data());
console.log(doc.id, '=>', JSON.stringify(doc));
});
})