ami*_*ros 11 observable firebase angular google-cloud-firestore
我正在尝试使用Firebase FireStore数据库在Angular 2中构建一个聊天应用程序.
我能够创建一个Collection
,Docuement
每个'消息' 都有一个.我使用此代码来检索消息:
export interface MessageItem {
message: string;
DateTime: Date;
User: string;
}
messagesCollection: AngularFirestoreCollection<MessageItem>;
messages: Observable<MessageItem[]>;
getChatData() {
this.messagesCollection = this.afs.collection<MessageItem>('chat_messages');
this.messages = this.messagesCollection.valueChanges();
}
Run Code Online (Sandbox Code Playgroud)
但是,因为我想要多个用户,所以我想Document
为每个用户创建一个用户,这些用户存储在一个Collection
消息中.
这使它变得复杂,我不确定如何完成它.
我很乐意提供一些指导.
您可以采取的一种方法是,您不想将文档集合存储为“消息”,而是创建一个“对话”集合,然后在每个“对话”文档中都有一个简单的“文档引用”数组,该数组引用该对话中有两个用户。您还可以只存储每个用户的 UID,然后在必要时获取该用户。然后,在“对话”文档内,您将拥有两个用户之间的消息集合。这是我会采取的方法,如果您需要更多帮助,我可以创建模型服务和数据结构作为示例进行展示。简而言之,首先存储对话将有助于这里的结构。
以下是我如何设置 Firestore 结构的示例:
在对话集合中,我将向用户存储一个文档引用数组,然后拥有与此对话相关的消息集合。
现在,在用户集合中,我将为每个用户提供一个文档,其中文档 ID 是经过身份验证的用户的 UID。这可能看起来多余,但我还会在用户集合中创建一个对话集合,其中每个文档只有一个字段,该字段是对话文档的 DocumentReference。以下是 convos 集合中该文档的示例:
这样,您就可以阻止用户在 Conversations 集合中创建重复的对话文档,并且您只需确保在对话开始后将对话引用保存到每个用户的 convos 集合中。
从服务获取数据时,您需要 snapshotChanges 并获取该引用路径,然后请求快照上地图函数内部的对话。在创建该服务并使用 angularfire2 设置服务后,如果您需要该服务的指导,请告诉我。
归档时间: |
|
查看次数: |
1724 次 |
最近记录: |