我是Firebase的新手,具有Angular的基本知识。这是我的学习示例项目。
我的firestore数据库有三个集合-父,子,parent_child
parents :
pid1 - { name: Parent1 }
pid2 - { name: Parent2 }
children:
cid1 - { name: Child1 }
cid2 - { name: Child2 }
parent_child:
pcid1 - {
parent: /parents/pid1 //(a reference to Parent1)
child: /children/cid2 //(a reference to Child2)
}
我的打字稿类变量pid1
中的值为id
。需要查询与此父级关联的所有子级。我的努力到此为止了,这没有用,
constructor(private db: AngularFirestore) { }
let id = 'pid1';
this.db.collection<any[]>('parent_child', ref => ref.where('parent.id', '==', id))
.valueChanges()
.subscribe(
data => console.log(data) // Prints empty array
)
大多数博客/ SO答案都解释了对内部集合的查询,而不是这个。
编辑1:
感谢@ ricardo-smania指导我。这是立即解决方案
使用AngularFirestore.doc()方法创建对id为'pid1'的Parent的引用,并在where子句中使用AngularFirestoreDocument.ref属性。
constructor(private db: AngularFirestore) { }
const id = 'pid1';
const pObj = this.db.doc('parents/'+id);
this.db.collection('parent_child', ref => ref.where('parent', '==', pObj.ref))
.valueChanges()
.subscribe(
data => console.log(data) // Prints the array with references
)
这只会获取给定parent_child
的{{1}}集合。 但是我仍然不确定如何访问子级属性
答案 0 :(得分:3)
如果您在Firestore中使用字段类型“ Reference”,我相信您需要创建对该记录的引用,然后使用该引用进行查询,例如使用Firebase JS SDK的示例:
ALTER TABLE ChildTableName
DROP FOREIGN KEY `fk_table`;
ALTER TABLE ChildTableName
ADD CONSTRAINT `fk_t1_t2_tt`
FOREIGN KEY (`parentTable`)
REFERENCES parentTable (`columnName`)
ON DELETE CASCADE
ON UPDATE CASCADE;
但是我不确定使用AngularFire是否可行。但是,尽管如此,您始终可以使用const ref = firebase.firestore().collection('parents').doc('pid1');
const parentChild = await firebase.firestore().collection('parent_child').where('parent', '==', ref).get();
来回退到香草SDK。