Firebase文档删除奇数段
Firebase document deletion odd number of segments
我试图通过单击 table 中的按钮从 firebase 中删除一个条目,但出现此错误:
FirebaseError: Invalid document reference. Document references must > have an even number of segments, but iEwblJo832nnC6TkFDEy has 1.
我刚刚查询了一下,不明白为什么文档的段数是奇数。我该如何解决这个问题?
执行查询 select 并尝试删除的函数
async deleteMovie(movieToDelete : Movie) {
await this.moviesRef.ref.where('includedBy', '==', movieToDelete.includedBy).where('title', '==', movieToDelete.title).get().then((querySnapshot) => {
querySnapshot.forEach((doc) => this.database.doc(doc.id).delete());
});
return true;
}
删除按钮的点击功能
async deleteEntry (item : Movie) {
let idx = this.movieData.data.indexOf(item);
if(await this.movieService.deleteMovie(this.movieData.data[idx]) === true) {
this.movieData.data.splice(idx,1);
this.movieData._updateChangeSubscription();
}
else {
window.location.reload();
}
}
创建按钮的html页面
<div class="container-page">
<p id="toolbar-top">
<mat-toolbar color="primary">
Welcome (de pus numele userului aici)
<button mat-icon-button id="logout-icon">
<mat-icon>logout</mat-icon> Logout
</button>
</mat-toolbar>
</p>
<table class="mat-elevation-z8 table-main" mat-table [dataSource]="movieData" matSort>
<ng-container matColumnDef="title">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Title </th>
<td mat-cell *matCellDef="let element"> {{element.title}} </td>
</ng-container>
<ng-container matColumnDef="genre">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Genre </th>
<td mat-cell *matCellDef="let element"> {{element.genre}} </td>
</ng-container>
<ng-container matColumnDef="watchStatus">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Status </th>
<td mat-cell *matCellDef="let element"> {{element.watchStatus}} </td>
</ng-container>
<ng-container matColumnDef="rating">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Rating </th>
<td mat-cell *matCellDef="let element"> {{element.rating}} </td>
</ng-container>
<ng-container matColumnDef="wouldRecommend">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Recommended ? </th>
<td mat-cell *matCellDef="let element"> {{element.wouldRecommend}} </td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef ></th>
<td mat-cell *matCellDef="let row" >
<button mat-raised-button color="warn" (click)="deleteEntry(row)">Delete</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator class="paginator-main" [pageSizeOptions]="[5, 10, 15]"
showFirstLastButtons
aria-label="Select page of movies list">
</mat-paginator>
<button id="new-entry-button" mat-raised-button color="primary" (click)="addNewEntry()">Add new movie</button>
</div>
电影界面
export interface Movie {
includedBy : string;
title : string;
genre : string;
watchStatus : string;
rating : string;
wouldRecommend : string;
}
这就是我的 Firebase 集合的样子
您正在查询 this.moviesRef
,但随后正在从 this.database
中删除,因此这两个引用似乎不同。
要从查询中删除,您只需在结果本身中获取文档快照的引用即可:
this.moviesRef.ref
.where('includedBy', '==', movieToDelete.includedBy)
.where('title', '==', movieToDelete.title)
.get().then((querySnapshot) => {
querySnapshot.forEach((doc) => doc.ref.delete());
});
我试图通过单击 table 中的按钮从 firebase 中删除一个条目,但出现此错误:
FirebaseError: Invalid document reference. Document references must > have an even number of segments, but iEwblJo832nnC6TkFDEy has 1.
我刚刚查询了一下,不明白为什么文档的段数是奇数。我该如何解决这个问题?
执行查询 select 并尝试删除的函数
async deleteMovie(movieToDelete : Movie) {
await this.moviesRef.ref.where('includedBy', '==', movieToDelete.includedBy).where('title', '==', movieToDelete.title).get().then((querySnapshot) => {
querySnapshot.forEach((doc) => this.database.doc(doc.id).delete());
});
return true;
}
删除按钮的点击功能
async deleteEntry (item : Movie) {
let idx = this.movieData.data.indexOf(item);
if(await this.movieService.deleteMovie(this.movieData.data[idx]) === true) {
this.movieData.data.splice(idx,1);
this.movieData._updateChangeSubscription();
}
else {
window.location.reload();
}
}
创建按钮的html页面
<div class="container-page">
<p id="toolbar-top">
<mat-toolbar color="primary">
Welcome (de pus numele userului aici)
<button mat-icon-button id="logout-icon">
<mat-icon>logout</mat-icon> Logout
</button>
</mat-toolbar>
</p>
<table class="mat-elevation-z8 table-main" mat-table [dataSource]="movieData" matSort>
<ng-container matColumnDef="title">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Title </th>
<td mat-cell *matCellDef="let element"> {{element.title}} </td>
</ng-container>
<ng-container matColumnDef="genre">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Genre </th>
<td mat-cell *matCellDef="let element"> {{element.genre}} </td>
</ng-container>
<ng-container matColumnDef="watchStatus">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Status </th>
<td mat-cell *matCellDef="let element"> {{element.watchStatus}} </td>
</ng-container>
<ng-container matColumnDef="rating">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Rating </th>
<td mat-cell *matCellDef="let element"> {{element.rating}} </td>
</ng-container>
<ng-container matColumnDef="wouldRecommend">
<th mat-header-cell *matHeaderCellDef mat-sort-header> Recommended ? </th>
<td mat-cell *matCellDef="let element"> {{element.wouldRecommend}} </td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef ></th>
<td mat-cell *matCellDef="let row" >
<button mat-raised-button color="warn" (click)="deleteEntry(row)">Delete</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator class="paginator-main" [pageSizeOptions]="[5, 10, 15]"
showFirstLastButtons
aria-label="Select page of movies list">
</mat-paginator>
<button id="new-entry-button" mat-raised-button color="primary" (click)="addNewEntry()">Add new movie</button>
</div>
电影界面
export interface Movie {
includedBy : string;
title : string;
genre : string;
watchStatus : string;
rating : string;
wouldRecommend : string;
}
这就是我的 Firebase 集合的样子
您正在查询 this.moviesRef
,但随后正在从 this.database
中删除,因此这两个引用似乎不同。
要从查询中删除,您只需在结果本身中获取文档快照的引用即可:
this.moviesRef.ref
.where('includedBy', '==', movieToDelete.includedBy)
.where('title', '==', movieToDelete.title)
.get().then((querySnapshot) => {
querySnapshot.forEach((doc) => doc.ref.delete());
});