我创建了简单的couchbase空间视图以获取报告列表,但它会出现{error: "error", reason: "badarg"}
错误。
以下是我的观点: -
function (doc, meta) {
if (doc.type == "report" && doc.location && doc.location.type && doc.location.coordinates) {
if(doc.location.type=='Point'){
emit(doc.location, {
summary:doc.summary
});
}
}
}
为什么会出现这个badarg错误,同样的视图工作在不同的doc.type
上答案 0 :(得分:0)
我在空桶上使用了View,并在View UI页面上使用了示例查询来测试它:
_design/dev_test/_spatial/test?stale=false&connection_timeout=60000&limit=10&skip=0
在空桶上我得到了一个成功但空洞的结果,这是预期的。一旦我添加了上面的示例文档,我就会收到同样的错误:
{error: "error", reason: "badarg"}
在查看文档和文档后,我发现使用此特定文档时失败,因为您的位置字段(doc.location.coordinates)中的纬度和经度坐标周围有双引号。如果要将位置字段作为键的几何体传递,则它们需要是不带引号的数字。有关空间视图的更多信息,请访问:http://docs.couchbase.com/admin/admin/Views/views-geospatial.html
理想情况下,您可以通过修复存储桶中的文档来解决问题。无论创建您的位置字段是什么,都需要将坐标放在需要浮动的字符串中。如果那是不可能的话,你可以尝试类似下面的东西在你的视图中进行转换,至少这应该证明字符串坐标是你问题的根本原因:
function (doc, meta) {
if (doc.type == "report" && doc.location && doc.location.type && doc.location.coordinates) {
if(doc.location.type=='Point'){
for(var i=0; i<doc.location.coordinates.length; i++){
doc.location.coordinates[i] = parseFloat(doc.location.coordinates[i]);
}
emit(doc.location, {summary:doc.summary});
}
}
}