带有参考ID的Angularfire2 Firestore查询

时间:2018-08-08 17:01:18

标签: angular firebase angularfire2

我是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}}集合。 但是我仍然不确定如何访问子级属性

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。