我有关于 Firestore 搜索、集合组和类似内容的问题。
我有 2 个主要收藏:/users 和 /hobbies
users 中的每个用户文档都有一个子集合“/hobbies”,我在其中存储用户选择的“hobbies”中的爱好 ID。 现在我想搜索具有特定爱好的用户和更多过滤器,例如年龄、家乡、在线状态。
我可以使用collectionGroups,首先搜索爱好,然后使用加载的用户ID来获取他们的数据并随后过滤它,但随后我将加载数百个具有特定爱好的用户文档,但只得到几个用户,例如,年龄 = 30。
有没有更好的方法来获取这些数据?
我尝试了collectionGroups,但这会导致大量具有特定爱好的用户,但只有少数用户具有我正在搜索的年龄。这是一个低效的解决方案。
有没有更好的方法来获取这些数据?
当然是。如果你想获得拥有特定爱好的所有用户,例如 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");