如何查询具有特定引用类型的Firebase项目

时间:2019-02-25 00:20:12

标签: javascript angular firebase google-cloud-firestore angularfire2

我有一个父集合categories,有一个子集合directories Directories通过Categories属性与Category连接

enter image description here

我要查询所有类别等于level的目录

this.firestore
      .collection<any>('directories', ref => ref.where('categories', '==', 'levels'))
      .get()
      .pipe(
        map(x => {
          const out: [] = [];
          x.forEach(y => {
            out.push(y.data());
          });
          return out;
        })
      );

我得到一个空数组作为回报。您将如何解决?

更新基于@ renaud-tarnec提供的answer

const categoryDocRef = this.firestore.doc('categories/levels');
this.firestore
      .collection<any>('directories', ref => ref.where('categories', '==', categoryDocRef))
      .get()
      .pipe(
        map(x => {
          const out: [] = [];
          x.forEach(y => {
            out.push(y.data());
          });
          return out;
        })
      );

现在出现错误core.js:15713 ERROR Error: Function Query.where() called with invalid data. Unsupported field value: a custom AngularFirestoreDocument object

1 个答案:

答案 0 :(得分:1)

如果要在查询中使用DocumentReference数据类型,则必须构建DocumentReference并在查询中使用它,如下所示(在“标准” JavaScript中):

        const categoryDocRef = firebase.firestore().doc('categories/levels');

        firebase.firestore().collection("directories").where("parent", "==", categoryDocRef)
        .get()
        .then(function(querySnapshot) {
           querySnapshot.forEach(function(doc) {
              console.log(doc.id, " => ", doc.data());
           });
        })
        .catch(function(error) {
           console.log("Error getting documents: ", error);
        });

我已经假设包含字段parent(依次包含DocumentReference类型数据)的文档位于名为directories的集合中。


更新:以下内容似乎不适用于angularFire2,请参见注释

因此,如果我没有记错的话,将根据您的问题代码按以下顺序进行操作:

const categoryDocRef = this.firestore.doc('categories/levels');

this.firestore
      .collection<any>('directories', ref => ref.where('parent', '==', categoryDocRef))
      .get()
      ...