【发布时间】:2019-12-03 22:27:00
【问题描述】:
我正在尝试使用 angular 和 firebase 创建一对一的聊天,我遵循了我在 stackoverflow 和 firebase 文档上看到的模型,基本上是 collection().doc().collection().add()
我最终得到了这样的结果
chats
user1UID
user1UID_user2UID
user1UID_user3UID
user2UID
user1UID_user2UID
user1UID_user3UID
user3UID
user1UID_user3UI
但由于某种原因,尝试通过 uid 路径检索聊天室不起作用并返回空
return this
.afs.collection('chats')
.doc(uid)
.snapshotChanges()
.pipe(
map(r => {
console.log(r);
})
);
我注意到 id 是斜体的,进一步研究后发现是这样的,因为文档中没有字段,并且必须手动创建文档才能注册并且“不是虚拟的”。虽然我是通过代码创建聊天。
const dRef = this.afs.collection('chats');
const c = Promise.all([
dRef.doc(uid).collection(`${uid}_${r_id}`).add(data),
dRef.doc(r_id).collection(`${r_id}_${uid}`).add(r_data)
]);
我尝试查看是否可以在添加集合时设置像“名称”这样的字段,但我认为 doc(uid).set({name: 'name'}).collection() 无法做到这一点,因为设置是一个承诺。任何帮助或指导将不胜感激。请让我知道我做错了什么,如果可能有更好和/或优化的方法,我很乐意欢迎它
【问题讨论】:
-
有什么问题?
-
@PeterHaddad 正在检索文档中的集合。我不确定这是否可能。
-
如果你这样做
return this .afs.collection('chats').snapshotChanges() .pipe( map(r => { console.log(r); }) );你会得到什么? -
它获取“聊天”集合中的所有文档。即user1UID、user2UID、user3UID。但我想获取特定用户 ID 下的子集合
-
你可以记录
uid并检查该值是否在数据库中
标签: angular typescript firebase google-cloud-firestore