如何根据需求查询?
How to query based on requirements?
我正在创建一个应用程序,人们可以在其中安排与专业人士的约会。
当专业人士创建帐户时,有时他们想要提供的服务可能需要在某些位置工作 permit/license。
我一直在尝试在 Firebase Firestore 上创建一个数据库设计,根据位置和服务类型,我可以获得一份要求列表(例如工作许可或保险)。
还值得注意的是,并非所有地点都提供所有服务。
目前我的设计如下(括号内为合集):
(locations)
United States
(cities)
New York
(categories)
Home Improvement
(services)
House Cleaning
- array of licenses/permits required
用户的国家和城市已知并存储在用户的个人资料文档中。
我对所有这一切都很陌生,但我什至可以看出这是非常重复的,因为我必须对每个位置都做同样的事情。
感谢任何帮助,谢谢!
一个单独的集合“服务”和包含有关服务的每个细节的文档应该做到这一点。
services -> {serviceID}
服务文档可能类似于:
{
serviceID: "service1234",
category: "Home Improvement",
location: "United States",
city: "New York",
requiredPermits: []
}
现在您可以轻松地根据位置、类别或任何其他字段查询服务:
const servicesCol = firebase.firestore().collection("services")
const servicesInNYC = await servicesCol.where("city", "==", "New York").get()
// for fetching services in multiple cities
await servicesCol.where("city", "in", ["New York", "Washington DC"]).get()
此外,如果服务可以有多个类别,那么您可以在其文档中存储一组类别,然后像这样获取特定类别:
await servicesCol.where("categories", "array-contains", "Home Improvement")
同样,您可以查询需要特定 license/permit 的服务(确保文档中的数组中包含这些服务)。
编辑: 如果单个服务可以有多个需要不同许可的位置,那么您可以删除 requiredPermits
字段并将位置移动到子集合,如下所示:
services -> {serviceID} -> locations -> {locationID}
位置子集合中的每个文档可能如下所示:
{
country: "United States",
city: "New York",
permits: [....]
}
现在您可以查询具有特定许可的服务的位置:
const serviceLocations = await servicesCol.doc("serviceID").collection("locations").where("permits", "array-contains", "permit1ID").get()
// To get services with a specific location/permit
const locationsGroup = firebase.firestore().collectionGroup("locations")
const snap = await locationsGroup.where("permits", "array-contains", "permit1ID").get()
我正在创建一个应用程序,人们可以在其中安排与专业人士的约会。 当专业人士创建帐户时,有时他们想要提供的服务可能需要在某些位置工作 permit/license。
我一直在尝试在 Firebase Firestore 上创建一个数据库设计,根据位置和服务类型,我可以获得一份要求列表(例如工作许可或保险)。
还值得注意的是,并非所有地点都提供所有服务。
目前我的设计如下(括号内为合集):
(locations)
United States
(cities)
New York
(categories)
Home Improvement
(services)
House Cleaning
- array of licenses/permits required
用户的国家和城市已知并存储在用户的个人资料文档中。
我对所有这一切都很陌生,但我什至可以看出这是非常重复的,因为我必须对每个位置都做同样的事情。
感谢任何帮助,谢谢!
一个单独的集合“服务”和包含有关服务的每个细节的文档应该做到这一点。
services -> {serviceID}
服务文档可能类似于:
{
serviceID: "service1234",
category: "Home Improvement",
location: "United States",
city: "New York",
requiredPermits: []
}
现在您可以轻松地根据位置、类别或任何其他字段查询服务:
const servicesCol = firebase.firestore().collection("services")
const servicesInNYC = await servicesCol.where("city", "==", "New York").get()
// for fetching services in multiple cities
await servicesCol.where("city", "in", ["New York", "Washington DC"]).get()
此外,如果服务可以有多个类别,那么您可以在其文档中存储一组类别,然后像这样获取特定类别:
await servicesCol.where("categories", "array-contains", "Home Improvement")
同样,您可以查询需要特定 license/permit 的服务(确保文档中的数组中包含这些服务)。
编辑: 如果单个服务可以有多个需要不同许可的位置,那么您可以删除 requiredPermits
字段并将位置移动到子集合,如下所示:
services -> {serviceID} -> locations -> {locationID}
位置子集合中的每个文档可能如下所示:
{
country: "United States",
city: "New York",
permits: [....]
}
现在您可以查询具有特定许可的服务的位置:
const serviceLocations = await servicesCol.doc("serviceID").collection("locations").where("permits", "array-contains", "permit1ID").get()
// To get services with a specific location/permit
const locationsGroup = firebase.firestore().collectionGroup("locations")
const snap = await locationsGroup.where("permits", "array-contains", "permit1ID").get()