Couchbase给出了badarg错误

时间:2015-08-17 14:43:08

标签: couchbase couchbase-view

我创建了简单的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

1 个答案:

答案 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});
    }
  }
}