collectionGroups 的 Firestore 替代方案

问题描述 投票:0回答:1

我有关于 Firestore 搜索、集合组和类似内容的问题。

我有 2 个主要收藏:/users 和 /hobbies

users 中的每个用户文档都有一个子集合“/hobbies”,我在其中存储用户选择的“hobbies”中的爱好 ID。 现在我想搜索具有特定爱好的用户和更多过滤器,例如年龄、家乡、在线状态。

我可以使用collectionGroups,首先搜索爱好,然后使用加载的用户ID来获取他们的数据并随后过滤它,但随后我将加载数百个具有特定爱好的用户文档,但只得到几个用户,例如,年龄 = 30。

有没有更好的方法来获取这些数据?

我尝试了collectionGroups,但这会导致大量具有特定爱好的用户,但只有少数用户具有我正在搜索的年龄。这是一个低效的解决方案。

firebase google-cloud-platform google-cloud-firestore
1个回答
0
投票

有没有更好的方法来获取这些数据?

当然是。如果你想获得拥有特定爱好的所有用户,例如 30 岁,那么我推荐以下结构,其中不需要任何爱好子集合:

db
|
--- users (collection)
     |
     --- $uid (document)
          |
          --- age: 30
          |
          --- hometown: "New York"
          |
          --- onlineStatus: "offline"
          |
          --- hobbies: ["fishing", "dancing", "hiking"]

以下查询:

db.collection("users")
  .whereArrayContains("hobbies", "fishing")
  .whereEqualTo("age", 30);

只会返回有“钓鱼”爱好且年满30岁的用户。如果您需要其他过滤器,您可以链接任意数量的whereEqualTo

db.collection("users") .whereArrayContains("hobbies", "fishing") .whereEqualTo("age", 30) .whereEqualTo("hometown", "New York") .whereEqualTo("onlineStatus", "offline");
    
© www.soinside.com 2019 - 2024. All rights reserved.