我知道这个主题有很多问题,但是其他问题似乎无法回答我的特定案例。
我具有以下结构:
每个通过FireAuth的用户都拥有一个崇拜。该邪教拥有更多的数据,例如他的邪教正在向哪个神敬拜,以及当前的动作已存储。 因此,我的Firestore收藏集如下所示:
•用户
uid
栽培种
...
•崇拜
栽培种
上帝
actionid
...
•神
上帝
关注者
•动作(这些实际上是正在发生的动作)
actionid
preActionid
攻击者(发起者的品种)
defenderid(发起者的品种)
完成(布尔值,它检查此操作是否已完成)
...
• PreActions (这些是给出的操作,用户可以选择 其中之一)
preActionid
...
对我来说,最大的问题是将所有这些链接在一起。例如,我需要能够检查用户崇拜正在执行的当前动作。我的想法是,要检查邪教的actionid是否不为空,请使用该变量并在当前操作中搜索特定的actionid,将其检索并显示。我将如何去做这样的连锁店?
我的服务和Firestore设置类似于本教程中的描述,因为我决定丢弃大部分当前代码并使其干净: https://www.toptal.com/angular/state-management-in-angular-using-firebase 我想这将使文本能够长期提供此处描述的所有泛型和继承,因此,如果您可以对其中进行简短的介绍,我将很高兴。
对于以不同形状显示数据的任何提示,我也将感到高兴,因为由于我的SQL习惯,我倾向于使其与数据之间具有高度的关联性。
谢谢您的帮助。
我尝试通过Frontend过滤当前操作,最终使Observable陷入混乱,我尝试通过backwhere过滤查询的where子句,由于缺少所有ID,该查询未能成功同时。
编辑:所以我决定可以添加一些代码:
export abstract class FirestoreService<T> {
protected abstract basePath: string;
constructor(@Inject(AngularFirestore) protected firestore: AngularFirestore) {}
doc$(id: string): Observable<T> {
return this.firestore.doc<T>(`${this.basePath}/${id}`).valueChanges().pipe(
tap(r => {
if (!environment.production) {
console.groupCollapsed(`Firestore Streaming [${this.basePath}] [doc$] ${id}`);
console.log(r);
console.groupEnd();
}
})
);
}
collection$(queryFn?: QueryFn): Observable<T[]> {
return this.firestore.collection<T>(`${this.basePath}`, queryFn).valueChanges().pipe(
tap(r => {
if (!environment.production) {
console.groupCollapsed(`Firestore Streaming [${this.basePath}] [collection$]`);
console.table(r);
console.groupEnd();
}
}),
);
}
export abstract class StoreService<T> {
protected bs: BehaviorSubject<T>;
state$: Observable<T>;
state: T;
previous: T;
protected abstract store: string;
constructor(initialValue: Partial<T>) {
this.bs = new BehaviorSubject<T>(initialValue as T);
this.state$ = this.bs.asObservable();
this.state = initialValue as T;
this.state$.subscribe(s => {
this.state = s;
});
}
patch(newValue: Partial<T>, event: string = 'Not specified') {
this.previous = this.state;
const newState = Object.assign({}, this.state, newValue);
if (!environment.production) {
console.groupCollapsed(`[${this.store} store] [patch] [event: ${event}]`);
console.log('change', newValue);
console.log('prev', this.previous);
console.log('next', newState);
console.groupEnd();
}
this.bs.next(newState);
}
编辑:换句话说:如果您有这样的关系模型,您将如何寻求服务和状态等?
编辑:因此,我已经阅读了一些有关fork连接和在firestore中复制数据的知识,这在NoSQL数据库中似乎还不错,但是不幸的是,这些方法都没有真正解决我的问题。