如何解决无法从集合Firebase角度删除文档
我更新了firestore图片以进行结构化:
我使用此方法删除了馆藏中的文档,但没有收到错误,但产品ID仍然正确。
firebase.service.ts
deleteProdusBayonete(id: string): Promise<void> {
return (
console.log(id),this.firestore
.collection("bayonete")
.doc<CutiteInterface>(`bayonete/bayonete/${id}`)
.delete()
.catch((error) => {
console.log(error);
})
);
}
delete-product.page.ts
async deleteProdus(fID) {
console.log(fID);
const alert = await this.alertController.create({
message: "Are you sure you want to delete this product?",buttons: [
{
text: "Cancel",role: "cancel",handler: (aha) => {
console.log("Confirm Cancel: blah",aha);
},},{
text: "Okay",handler: () => {
this.FirebaseService.deleteProdusBayonete(fID).then(() => {
console.log(fID + " => Deleted");
});
},],});
await alert.present();
}
delete-product.page.html
<ion-col class="arranged" size-lg="6" size-md="6" size-sm="6" size-xs="12"
*ngFor="let bayoneta of this.ProduseService.allBayonet | async"
[routerLink]="['/produse','angro','bayonete',bayoneta.id]">
...
<ion-button type="submit" (click)="this.deleteProdus(bayoneta.id)">Sterge
Produs</ion-button>
**更新:
我修改了方法,所以我声明了另一个名为的参数,它是随机生成的uniqueId。但是..如果无法访问通过 this.firestore.createId();
函数添加产品时自动生成的documentId,则无法访问此参数。
仍然,我可以获得我的自定义参数,但是无法使我的方法删除具有以下相同唯一ID的文档。 **
async deleted(uniqueID: string): Promise<any> {
return await firebase
.firestore()
.collection("bayonete")
.where("uniqueID","==",`${uniqueID}`)
.get()
.then((res: any) => {
console.log(uniqueID);
firebase.firestore().collection("bayonete").doc(uniqueID).delete();
console.log(uniqueID);
})
.catch((err: any) => {
console.log(err);
});
}
我使用的创建产品方法是这样:
createProdus(
id: any,title: string,description: string,stoc: boolean,price: number,reducere: number,tag: string,image: string,userId: string,uniqueID: string
): Promise<void> {
this.actualID = this.firestore.createId();
this.firestore.collection("bayonete");
return this.firestore.doc(`${id}/${this.actualID}`).set({
id,title,description,stoc,price,reducere,tag,image,userId,uniqueID,});
}
解决方法
问题在于,在您的Firestore上,documentId
不是您称为id
的字段。为此,您必须首先通过查询Firestore发现documentId
,在AngularFire中,您必须使用snapshotchanges()
来执行此操作。因此,用于删除功能的代码如下所示:
deleteProdusBayonete(id: string): Promise<void> {
return (
console.log(id),this.firestore
.collection('/bayonete',ref => ref.where('id','==',${id}))
.snapshotChanges().pipe(
map(actions => actions.map(a => {
const id = a.payload.doc.id;
return { id };
})))
.subscribe(documentId=> {
this.firestore
.collection("bayonete")
.doc<CutiteInterface>(documentId)
.delete()
.catch((error) => {
console.log(error);
})
});
);
}
让我知道这是否可行。
注意:这是假设id
的值是唯一的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。