CouchDB查询更多动态值

CouchDB查询更多动态值,couchdb,Couchdb,我的couchdb中有更多的“位置文档”,带有经度和纬度字段。如何在数据库中找到与提供的纬度和经度的距离小于提供的距离的所有位置文档。CouchDB不是为动态查询而构建的,因此在vanilla CouchDB中没有很好/快速的实现方法。 如果事先知道要计算距离的位置,可以为每个位置创建一个视图,并使用参数调用它?startkey=0&endkey=max_distance 功能(doc){ 函数距离(…){/*用于计算距离的函数*/} var NY={lat:40,lon:73} 发射(距离(纽

我的couchdb中有更多的“位置文档”,带有经度和纬度字段。如何在数据库中找到与提供的纬度和经度的距离小于提供的距离的所有位置文档。

CouchDB不是为动态查询而构建的,因此在vanilla CouchDB中没有很好/快速的实现方法。 如果事先知道要计算距离的位置,可以为每个位置创建一个视图,并使用参数调用它?startkey=0&endkey=max_distance

功能(doc){
函数距离(…){/*用于计算距离的函数*/}
var NY={lat:40,lon:73}
发射(距离(纽约,doc),doc.\u id);
}

如果您事先不知道位置,可以使用临时视图来解决,但我强烈建议不要使用它,因为它很慢,应该只用于测试。

有一种方法可以使用vanilla CouchDB实现它,但它有点棘手

您可以在一个请求期间应用两个映射函数。第二个映射函数可以使用列表机制创建

列表在计算方面不是很有效,它们不能将结果缓存为视图。但它们有一个独特的特性——您可以将多个参数传递到列表中。此外,您的一个参数可以是,例如,JS代码,它在列表函数中被评估(有风险!)

整个方案如下所示:

  • 生成视图,执行粗略搜索
  • 生成列表,用于接收自定义参数并细化数据集
  • 制作客户端API以简化对该链的查询
无法为您的特定情况提供精确的代码,许多细节尚不清楚,但粗略搜索似乎必须将结果分组为某种线性枚举的正方形,列表执行更精确的计算


请注意,对于大型数据集,该方案可能效率低下,因为它需要大量计算。

Vanilla CouchDB并不是真正为地理空间查询而构建的

你最好的选择是使用,或者类似的东西

如果做不到这一点,您可以从map函数发出一个值,并对这些值进行范围查询

警告适用。围绕Geohash“断层线”(赤道、极点、经度180等)的查询可能会给出太多或太少的结果

有多个JavaScript库可以帮助转换为Geohash或从Geohash转换,还可以帮助解决其中的一些问题