假设每个用户除了其他凭据(如电子邮件等)外,还有一个位置(十进制度格式的纬度和经度)。
我将每个用户的帐户信息保存在数据库的users
表中,如下所示:
字符串" W9ulK6s ......"是用户的uid
,点击+
后,您会看到有关此用户的详细信息
由于用户可以看到地理位置靠近他/她的其他用户,我想我应该将每个用户的另一个副本保存在名为users_location
的表中,这样,我可以根据用户的位置过滤用户必须遍历数据库中的每个用户。
但是,我不知道此时应该做些什么,firebase不允许密钥包含.
,因此,我不能使用纬度或经度作为密钥,例如,我不能做这样的事情:假设当前用户的位置是(40.1234566,-80.1234567),纬度和经度
users_location
40.1234567 // this path contains ".", which is not allowed
-80.1234567 // neither is this path
W9ulK6sUXnVq6VVOlSWhRoVjS6t2
email: "stack@overflow.com"
photoURL: "https://stackoverflow.com"
... // Other credentials
那么,这个users_location
的结构应该是什么样的,以便我仍然可以按位置过滤用户?
答案 0 :(得分:1)
考虑到你的小数位数,两个坐标完全相同的可能性很小。正确的方法是简单地存储用户,为用户提供其密钥中的位置。
users
W9ulK6sUXnVq6VVOlSWhRoVjS6t2
email: "stack@overflow.com"
photoURL: "https://stackoverflow.com"
latitude: 40.1234567,
longitude: -80.1234567,
... // Other credentials
然后我会在这条路径上做一个类似的查询。唯一的困难是你不能同时查询,你必须通过一个或另一个查询然后通过查询客户端来找出你真正需要的东西。
ref.child('users').orderByChild('latitude').equalTo(40.1234567);
....
results = data.filter((item) => { item.longitude === -80.1234567});
当您想要通过多个字段进行查询时,Firebase无法正常运行。但是,新的Firestore允许您查询多个内容,但该产品目前处于测试阶段。