如何在 Angularfire 中实现多所有者文档?
How to implement a multiple-owners document in Angularfire?
我正在使用 Firebase 设计一个 Angular 应用程序,其中某个文档(商店)可以由多个所有者(用户)拥有,而且一个所有者可以拥有多个商店! (多对多关系)
如果我将所有者 uid 作为数组存储在商店文档中,那么在 Angular 中将很难查询我是所有者之一的文档。
或者,许多人建议我将他们的 uid 存储在地图中,如下所示:
shop = {
name: string,
owners: {
id1: id1,
id2: id2,
...etc
}
}
然后像这样查询:
.where('owners.'+myUid, '==', myUid)
这很有用,除非我在查询时尝试按名称的字母顺序对商店列表进行排序。
一旦我添加 [orderBy],它会抱怨它需要创建一个索引,但问题是它想要创建一个包含我的 uid 和名称的索引,这意味着每个用户的索引(这不是实用)!
我做错了什么?
对于这个特定的查询,您将需要一种不同的方式来存储您的所有者。您可以简单地将所有者存储为字符串数组而不是映射,然后使用 array-contains:
查询它
collection
.where('owners', 'array-contains', myUid)
.orderBy('name')
我正在使用 Firebase 设计一个 Angular 应用程序,其中某个文档(商店)可以由多个所有者(用户)拥有,而且一个所有者可以拥有多个商店! (多对多关系)
如果我将所有者 uid 作为数组存储在商店文档中,那么在 Angular 中将很难查询我是所有者之一的文档。
或者,许多人建议我将他们的 uid 存储在地图中,如下所示:
shop = {
name: string,
owners: {
id1: id1,
id2: id2,
...etc
}
}
然后像这样查询:
.where('owners.'+myUid, '==', myUid)
这很有用,除非我在查询时尝试按名称的字母顺序对商店列表进行排序。
一旦我添加 [orderBy],它会抱怨它需要创建一个索引,但问题是它想要创建一个包含我的 uid 和名称的索引,这意味着每个用户的索引(这不是实用)!
我做错了什么?
对于这个特定的查询,您将需要一种不同的方式来存储您的所有者。您可以简单地将所有者存储为字符串数组而不是映射,然后使用 array-contains:
查询它collection
.where('owners', 'array-contains', myUid)
.orderBy('name')