用于更好查询的 Firebase 数据库结构
Firebase Database Structure For Better Queries
我正在开发一款应用程序,帮助用户在附近的药店搜索他们想要的药物,然后显示有库存药品的药店列表和价格。
我有 SQL 背景,一直很难决定如何构建 Firestore 数据库以实现更好的查询,我认为通常您会浏览药店列表及其数据库,但是有没有如何为所有药物创建一个单一数据库,其中可能包含一个字段,该字段包含在 Firestore 中有库存的药房的主键?
有两种方法可以解决这个问题。第一个是在每个药房下创建一个子集合来保存所有可用药物:
Firestore-root
|
--- pharmacies (collection)
|
--- $pharmacyId (document)
|
--- drugs (sub-collection)
|
--- $drugId
|
--- name: "Aspirin"
|
--- inStock: true
要获得所有有库存的药房,例如,需要 collection group query。在 Android 中,查询应如下所示:
db.collectionGroup("drugs").whereEqualTo("name", "Aspirin").whereEqualTo("inStock", "true");
您的第二个选择是创建单个顶级药物集合:
Firestore-root
|
--- drugs (collection)
|
--- $drugId (document)
|
--- name: "Aspirin"
|
--- inStock: true
|
--- pharmacyId: $pharmacyId
并创建一个如下所示的简单查询:
db.collection("drugs").whereEqualTo("name", "Aspirin").whereEqualTo("inStock", "true");
所以您可以根据您的应用程序的用例选择工作或其中之一。
我正在开发一款应用程序,帮助用户在附近的药店搜索他们想要的药物,然后显示有库存药品的药店列表和价格。
我有 SQL 背景,一直很难决定如何构建 Firestore 数据库以实现更好的查询,我认为通常您会浏览药店列表及其数据库,但是有没有如何为所有药物创建一个单一数据库,其中可能包含一个字段,该字段包含在 Firestore 中有库存的药房的主键?
有两种方法可以解决这个问题。第一个是在每个药房下创建一个子集合来保存所有可用药物:
Firestore-root
|
--- pharmacies (collection)
|
--- $pharmacyId (document)
|
--- drugs (sub-collection)
|
--- $drugId
|
--- name: "Aspirin"
|
--- inStock: true
要获得所有有库存的药房,例如,需要 collection group query。在 Android 中,查询应如下所示:
db.collectionGroup("drugs").whereEqualTo("name", "Aspirin").whereEqualTo("inStock", "true");
您的第二个选择是创建单个顶级药物集合:
Firestore-root
|
--- drugs (collection)
|
--- $drugId (document)
|
--- name: "Aspirin"
|
--- inStock: true
|
--- pharmacyId: $pharmacyId
并创建一个如下所示的简单查询:
db.collection("drugs").whereEqualTo("name", "Aspirin").whereEqualTo("inStock", "true");
所以您可以根据您的应用程序的用例选择工作或其中之一。