这个问题让我感到震惊,我来到这里看看是否有人解决了我正在处理的这个案例。
这是我的数据库结构。
database
posts
userId
postId
title: "asd"
postGeo
g: "x"
l:
0: 'lat'
1: 'long
我使用geoFire.queryAtLocation(userLocation, radius);
来查询指定地理围栏区域内的每个帖子ID。我将每个postId存储在自己的列表中。
然后我使用此列表来检索帖子信息。
我的问题,查询或重新构建我的数据的最有效方法是什么,以便我不必遍历每个帖子?
空气中的想法,通过邮政编码进行重组,然后在该zip中进行查询。这样我只循环遍历该范围内的数据集。我觉得有一个更容易 - 应该是明显的方式这样做我不明白。也许你可以帮忙吗?
database
posts
zipCode
userId
postId
title: "asd"
postGeo
g: "x"
l:
0: 'lat'
1: 'long
答案 0 :(得分:0)
完成地理位置查询后,您将获得每条记录的密钥,然后您应该将数据结构化,这样您就可以取出该记录,不需要搜索或重新组织数据。
因此,如果你想要所有的postIds,你的帖子数据将是
{{1}}
答案 1 :(得分:0)
一种方法是对数据进行非规范化,并在数据库中使用两个数据结构并行。这是NoSQL数据库的一种经典方法。
所以你会(原样):
database
posts
userId
postId
title: "asd"
你会添加另一个节点,如:
database
posts
zipCode
postId
title: "asd"
通过这种方式,您可以通过两种不同的方式进行有效查询。
此方法的唯一缺点是您必须保持两个节点同步。但是,这可以通过使用此处所述的更新方法同时写入两个数据库节点来轻松完成https://firebase.google.com/docs/database/web/read-and-write#update_specific_fields
只是一个额外的注意事项:您可能会对此帖Load existing Geofire location if one exists
感兴趣