如何将URL参数传入CouchDB Map函数?附现有函数示例
如何在CouchDB Map函数中动态获取URL参数
嘿,我来帮你搞定这个问题!你的Map函数现在用的是固定坐标和半径,要改成从URL参数动态获取其实很简单,CouchDB本身就支持在视图查询时传递自定义参数,下面是具体的实现步骤:
1. 修改Map函数,从查询参数读取值
把原来的固定值替换成从this.query对象中获取的参数,同时记得做类型转换和默认值处理(避免参数没传的时候函数报错):
function (doc) { // 从URL查询参数中获取值,带默认值兜底 const center_latitude = parseFloat(this.query.center_lat) || 52.3648111; const center_longitude = parseFloat(this.query.center_lon) || 4.8810906; const radius = parseFloat(this.query.radius) || 5; // 补全距离计算的完整代码 const distance = Math.acos( Math.sin(doc.latitude * Math.PI / 180) * Math.sin(center_latitude * Math.PI / 180) + Math.cos(doc.latitude * Math.PI / 180) * Math.cos(center_latitude * Math.PI / 180) * Math.cos((center_longitude - doc.longitude) * Math.PI / 180) ) * 6371; // 乘以地球半径(公里)得到实际距离值 // 只输出在指定半径范围内的文档 if (distance <= radius) { emit(doc._id, { distance: distance, doc: doc }); } }
2. 查询视图时传入URL参数
当你调用这个视图的时候,直接在URL后面加上对应的参数就行,比如:
GET /你的数据库名/_design/你的设计文档名/_view/你的视图名?center_lat=52.36¢er_lon=4.88&radius=3
关键注意点
- 类型转换很重要:URL参数都是字符串类型,必须用
parseFloat转成数字,不然数学计算会出问题 - 默认值兜底:设置默认值是为了在用户没传参数的时候,函数依然能正常运行,用你原来的固定值就很合适
- 版本要求:
this.query是CouchDB 2.0及以上版本才支持的特性,如果你的版本太旧,可能需要把参数编码到key里,但这种方法会麻烦很多,建议尽量升级到新版本
内容的提问来源于stack exchange,提问作者fransyozef
相关产品推荐
相关产品推荐

