我需要从集合中删除所有文档,但是我应该只删除“ pedido”等于“ this.pProdutos”的地方。问题在于,即使在查询后,它也会删除整个集合中的所有文档。 我现在正在下面使用此代码:
this.db.collection('produtosPedidos', ref => ref.where('pedido', '==', this.pProdutos)).ref
.get()
.then(querySnapshot => {
querySnapshot.forEach((doc) => {
doc.ref.delete().then(() => {
console.log("Document successfully deleted!");
}).catch(function(error) {
console.error("Error removing document: ", error);
});
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
答案 0 :(得分:1)
问题是由查询末尾的.ref
引起的:
ref.where('pedido', '==', this.pProdutos)).ref
第一部分ref.where('pedido', '==', this.pProdutos))
构造了一个查询,但是在该查询上调用ref
将向整个集合返回CollectionReference
。删除结尾的.ref
,它应该可以工作。
this.db.collection('produtosPedidos', ref => ref.where('pedido', '==', this.pProdutos))
.get()
.then(querySnapshot => {
...
对于这种类型的操作,通过AngularFire运行它没有任何其他好处。我建议只在裸露的JavaScript SDK上运行它,以减少代码量。由于AngularFire是基于JavaScript SDK构建的,因此当您执行此操作时,两者可以完美地互操作。
在代码中:
firebase.firestore().collection('produtosPedidos').where('pedido', '==', this.pProdutos)
.get()
.then(querySnapshot => {
答案 1 :(得分:0)
deleteOffice(office) {
this.firestore
.collection('offices', (ref) => ref.where('name', '==', office.name))
.get()
.subscribe((querySnapshot) => {
querySnapshot.forEach((doc) => {
doc.ref
.delete()
.then(() => {
console.log('Document successfully deleted!');
})
.catch(function (error) {
console.error('Error removing document: ', error);
});
});
});