【发布时间】:2020-12-07 21:47:21
【问题描述】:
我正在创建一个应用程序,我想从用户源中获取最近的用户帖子。因此,用户可以阅读他所在位置附近的所有帖子。所以我正在使用这段代码:
let query = dbRef
.orderBy('location.geohash')
.where("location.geohash", ">=", range.lower)
.where("location.geohash", "<=", range.upper)
.limit(9)
问题是当我想添加“.startAt(somefield)”时。无法检索更多数据,因为 geohashes 不是唯一的。实际上,如果我想用 .orderBy(timestamp) 订购这个 fetch,我也会遇到同样的问题(它不起作用)
所以我的问题是。实际上有一种方法可以做到这一点。或者也许我必须选择转移到像 mysql 这样的关系数据库?
【问题讨论】:
-
所有查询都以对文档 ID 的
orderBy调用隐式结束。如果您将DocumentSnapshot传递给startAt(),则它包含查找起始文档所需的所有信息,即使location.geohash值不是唯一的。 -
您好,感谢您的回答,我在 youtube 上观看了您关于此的视频。好的,但是当我添加 startAt("geohashhere") 我只得到一个结果然后崩溃。检查此图像。请prnt.sc/u1r8p8。当我只使用 dbRef.orderBy("timestamp").limit(9).startAt(" a date here") 时,这不会发生。这里效果很好
-
如前所述:您需要传递
DocumentSnapshot,或者至少传递 geohash 和文档 ID,以便使用该 ID 消除歧义。 -
原谅我的无知,但我理解你说的是这样做:i.imgur.com/0ueDBLT.png但我得到了重复的数据
-
好的,我用异步函数解决了在获取查询之前等待响应。非常感谢您的帮助
标签: javascript firebase react-native google-cloud-firestore