我有一个父集合categories
,有一个子集合directories
Directories
通过Categories
属性与Category
连接
我要查询所有类别等于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
答案 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()
...