【发布时间】:2020-11-06 14:02:11
【问题描述】:
我的 firestore 项目查询时遇到了一个奇怪的行为。项目的一位用户就像系统的所有者,我们称他为生产者。而另一个users,可以属于一个producer,所以我有一个users的集合,其中我有一个名为producer的字段,带有producer ID,如下所示。
{user: {id: '...', producer: '...', ...}
我有一个称为转账的功能,我可以将现金从一个用户帐户转移到另一个帐户,但仅限于同一生产者的用户内部。所以我需要获取生产者与登录用户相同的所有用户,在这个集合上,这是我的功能:
constructor(
private afAuth: AngularFireAuth,
private afs: AngularFirestore
) { }
fetchUsers() {
return this.afAuth.authState.pipe(
switchMap( user => { // Here I have the logged user
return this.afs.doc(`users/${user.uid}`).valueChanges() // Here I need his details on users collection
}),
first(),
switchMap( (user: any) => {
return this.afs.collection('users',
ref => ref.where('producer', '==', user.producer) // Now I want the other users from same producer
).valueChanges()
})
)
}
但它不起作用,结果上唯一的用户是调用函数的用户。这是 Angular Fire 的限制还是我做错了?
我认为这可能是一个错误,因为我可以使用 get on document 然后 on collection 来解决这个问题:
return this.afAuth.authState.pipe(
switchMap( user => {
return this.afs.doc(`users/${user.uid}`).get()
}),
first(),
map( usuario => {
return usuario.data()
}),
switchMap( (usuario: any) => {
return this.afs.collection('users', ref => ref.where('produtor', '==', usuario.produtor)).get()
}),
first(),
map( data => {
let users = []
data.docs.map( doc => {
users.push(doc.data())
})
return users
})
)
这样,它返回生产者 produtor 与登录用户相同的所有用户。如果有人能解释一下原因,我将不胜感激。
【问题讨论】:
-
您能展示一下您的数据库结构吗?我的假设是您没有查询正确的数据,因此没有获得某个 producer 下的 users。如果您的数据如下所示:生产者 -> 生产者 -> 用户 -> 用户 {id 和生产者字段},您可能需要查询 生产者 集合以检索正确的 生产者 文档,您可以访问其用户列表。
-
@sllopis 我刚刚添加了我的数据结构,我放了两条记录,一条 UID 以'06'开头的记录是生产者,其他用户与他相关,在字段
produtor。
标签: angular firebase google-cloud-firestore angularfire5